powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать два запроса.
24 сообщений из 24, страница 1 из 1
Помогите написать два запроса.
    #39800643
Tsorion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4. SQL. Дана таблица. Напишите запрос, чтобы найти дубликаты по полю Name. Напишите запрос, чтобы удалить дубликаты, должны остаться уникальные записи с максимальным идентификатором.

Id Name
1 1
2 2
3 1
4 1
5 2
6 3
7 4
8 5
9 6
10 7

Если возможно - с объяснением (хотя бы кратко). Спасибо.
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800648
dvk92
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsorion,

1.

select id,count(name)
from table
group by id
having count(name)>1



2.
delete from table
where id not in (select max(id)
from (select id,count(name)
from table
group by id
having count(name)>1))
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800649
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800652
dvk92
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvk92,

1
select name
from (select name,count(id)
from table
group by id
having count(id)>1) t1
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800660
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvk92dvk92,

1
select name
from (select name,count(id)
from table
group by id
having count(id)>1) t1Завязывайте группировать по одному полю в надежде найти там какий-то дубликаты по другому.
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800661
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прям зажигают на каждом углу

Код: sql
1.
select name,count(id) from table group by id
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800669
dvk92
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

Простите, что?
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800674
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvk92Гавриленко Сергей Алексеевич,

Простите, что?Какое именно слово вам не понятно?
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800679
dvk92
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевичdvk92Гавриленко Сергей Алексеевич,

Простите, что?Какое именно слово вам не понятно?

Как стоит группировать, если в таблице всего два поля?
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800680
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvk92Гавриленко Сергей Алексеевичпропущено...
Какое именно слово вам не понятно?

Как стоит группировать, если в таблице всего два поля?
правильно
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800681
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvk92Как стоит группировать, если в таблице всего два поля?

dvk92select name
from (select name ,count(id)
from table
group by id
having count(id)>1) t1
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800683
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvk92Гавриленко Сергей Алексеевичпропущено...
Какое именно слово вам не понятно?

Как стоит группировать, если в таблице всего два поля?В таблице два поля. По id группировать неправильно. Хмм... Что же делать? По какому полю группировать? Тут консилиум нужен.
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800692
dvk92
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexdvk92Как стоит группировать, если в таблице всего два поля?

dvk92select name
from (select name ,count(id)
from table
group by id
having count(id)>1) t1

Я слепой.
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800840
dklim.kzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delete table
Where row_number() over (partition by name order by id) >1

Лень уточнять, можно ли оконную в where

Если нет, то в подзапрос ее

Delete t
From table t
Cross apply (
Select row_number() rn over (partition by name order by id)
From table tt
)
Where tt.rn>1

Видел мнение, что cross apply создает проблемы, так что если детские бллезни будут замечены - можно сделать через exists да или вообще пересечением
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800841
dklim.kzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка

Delete t
From table t
Cross apply (
Select row_number() over (partition by name order by id) rn
From table tt
)
Where tt.rn>1
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39800843
dklim.kzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а блин))

Delete t
From table t
Cross apply (
Select row_number() over (order by id) rn
From table tt
where tt.name=t.name
) ttt
Where ttt.rn>1
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802426
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dklim.kznа блин))

Delete t
From table t
Cross apply (
Select row_number() over (order by id) rn
From table tt
where tt.name=t.name
) ttt
Where ttt.rn>1

Удалит все имена у которых есть повторы (ни одного экземпляра не оставит).
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802441
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не легче ли сразу выделить результирующую таблицу?
Код: sql
1.
select max(id), name from table group by name


Или надо именно удалить лишнее?
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802548
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopellydklim.kznа блин))

Delete t
From table t
Cross apply (
Select row_number() over (order by id) rn
From table tt
where tt.name=t.name
) ttt
Where ttt.rn>1

Удалит все имена у которых есть повторы (ни одного экземпляра не оставит).Нет, там же условие "номер записи из набора одинаковых > 1"
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802551
dklim.kzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мдя, не пишите кода под мухой и на отходных)

delete t
from table t,
(select name, max(id) i) f
where t.name=f.name
and t.id<>f.i
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802552
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dklim.kznмдя, не пишите кода под мухой и на отходных)

delete t
from table t,
(select name, max(id) i) f
where t.name=f.name
and t.id<>f.i
вам в вообще это не рекомендуется
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802569
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНет, там же условие "номер записи из набора одинаковых > 1"

Ну убедится что в ttt для этого t.name есть такие же имена с rn>1, и удалит запись из t (которые не пронумерованы и не завязаны по id)
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39802775
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, ну в FAQ ж есть!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
if OBJECT_ID('tempdb..#t') is not null 
	drop table #t

Create table #t (Id int, [Name] int)

insert into #t (Id, [Name])
Values
(1,	1)
,(2,	2)
,(3,	1)
,(4,	1)
,(5,	2)
,(6,	3)
,(7,	4)
,(8,	5)
,(9,	6)
,(10,	7)

-- Поиск
Select a.Id [Parent_Id], a.[Name] [Parent_Name], b.Id [Double_Id], b.[Name] [Doudle_Name]
	from #t a inner join #t b on a.Name = b.Name and a.Id > b.Id
Order by a.Name, a.Id

-- Удаление
;With tt as
(Select *, ROW_NUMBER() over (partition by [Name] order by Id DESC, 1/0 ) N from #t)
Delete from tt Where N>1

Select * from #t
...
Рейтинг: 0 / 0
Помогите написать два запроса.
    #39803079
dklim.kzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK,

Ну дописали бы, раз уж взялись комментить)

delete t
from table t,
(select name, max(id) i
from table tt) f
where t.name=f.name
and t.id<>f.i
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать два запроса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]