Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать два запроса. / 24 сообщений из 24, страница 1 из 1
12.04.2019, 15:54
    #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
12.04.2019, 16:01
    #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
12.04.2019, 16:03
    #39800649
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать два запроса.
...
Рейтинг: 0 / 0
12.04.2019, 16:13
    #39800652
dvk92
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать два запроса.
dvk92,

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

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

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

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

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

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

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

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

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

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

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

Я слепой.
...
Рейтинг: 0 / 0
13.04.2019, 07:24
    #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
13.04.2019, 07:25
    #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
13.04.2019, 07:42
    #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
17.04.2019, 04:50
    #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
17.04.2019, 07:36
    #39802441
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать два запроса.
Не легче ли сразу выделить результирующую таблицу?
Код: sql
1.
select max(id), name from table group by name


Или надо именно удалить лишнее?
...
Рейтинг: 0 / 0
17.04.2019, 10:20
    #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
17.04.2019, 10:26
    #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
17.04.2019, 10:27
    #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
17.04.2019, 10:44
    #39802569
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать два запроса.
alexeyvgНет, там же условие "номер записи из набора одинаковых > 1"

Ну убедится что в ttt для этого t.name есть такие же имена с rn>1, и удалит запись из t (которые не пронумерованы и не завязаны по id)
...
Рейтинг: 0 / 0
17.04.2019, 13:44
    #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
17.04.2019, 22:31
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать два запроса. / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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