получить строку максимального идентификатора из отдельных строк на sql сервере - PullRequest
1 голос
/ 28 мая 2020

У меня есть данные, как показано ниже, с несколькими строками с одинаковыми данными, которые можно идентифицировать по идентификатору.

enter image description here

Мне нужны данные, как показано ниже. Получить только индивидуальное значение максимального идентификатора для каждого набора повторяющихся записей можно, взяв индивидуальный максимальный идентификатор

enter image description here

Вы можете мне помочь в этом?

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Эффективный метод - с правильным индексом - это коррелированный подзапрос:

select t.*
from t
where t.individual = (select max(t2.individual) from t t2 where t2.id = t.id);

Правый индекс находится на (id, individual).

1 голос
/ 28 мая 2020

Вы можете фильтровать с помощью подзапроса. Предполагая, что столбцы вашей таблицы называются id, date и col, это будет:

select t.*
from mytable t
where t.col = (select max(t1.col) from mytable t1 where t1.id = t.id)

Для повышения производительности рассмотрите индекс на (id, col).

0 голосов
/ 28 мая 2020

Это должно вам помочь


create table #sample (type char(1), date datetime, Id bigint)
insert into #sample values('A', '5/22/2019 4:33', 1065621)
insert into #sample values('A', '5/22/2019 4:33', 1065181)
insert into #sample values('A', '5/22/2019 4:33', 1064212)
insert into #sample values('B', '11/7/2017 1:07', 540180)
insert into #sample values('B', '11/7/2017 1:07', 540179)
insert into #sample values('B', '11/7/2017 1:07', 540177)

select * from #sample

select [type], [date], max(id)
from #sample
group by [type], [date]

select distinct [type], [date], max(id) over(partition by  [type], [date] )
from #sample

Drop table #sample
...