Выбрать отдельную строку с максимальной датой из таблицы SQL Server?

StackOverflow https://stackoverflow.com/questions/806849

  •  03-07-2019
  •  | 
  •  

Вопрос

Мне нужно получить набор отдельных записей для таблицы вместе с максимальной датой для всех дубликатов.

бывший:

Select distinct a,b,c, Max(OrderDate) as maxDate
From ABC
Group By a,b,c

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

Бывший:

aaa, bbb, ccc, Jan 1 2009
aaa, bbb, ccc, Jan 28 2009

Как я могу ограничить это, чтобы в итоге у меня было только:

aaa, bbb, ccc Jan 28 2009

Я предполагаю, что проблема в том, что группа явно не ладит друг с другом.

РЕДАКТИРОВАТЬ:Обнаружена проблема, вызвавшая проблему, результаты запроса оказались такими, как ожидалось, а не такими, как указано выше.

Это было полезно?

Решение

Что-то не так либо с вашим запросом, либо с результатами вашего примера, поскольку то, что вы описываете, не должно быть возможным.Как насчет реального SQL и реальных результатов?

В любом случае вам не нужно distinct там, поскольку все, что вы выбираете, — это три сгруппированных столбца и совокупность, поэтому по определению вы получите все отдельные строки.Я никогда этого не пробовал, так что, возможно, при использовании обоих из них есть какие-то неправильные действия.Вы пытались удалить distinct?Что заставило вас положить это туда?

Другие советы

WITH q AS (
        SELECT  abc.*, ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY orderDate DESC) AS rn
        FROM    abc
        )
SELECT  *
FROM    q
WHERE   rn = 1

Наличие индекса на (a, b, c, orderDate) (в этом порядке) значительно улучшит этот запрос.

Если вы запустите этот запрос:

select 'ab' as Col1, 'bc' as col2, 'cd' as col3, getdate() as Date
into #temp
insert into #temp
values ('ab','bc','cd','1/15/09')
insert into #temp
values ('aa','bb','cc','1/1/09')
insert into #temp
values ('aa','bb','cc','1/22/09')

select col1,col2,col3,max(date)
from #temp
group by col1,col2,col3

Вы должны вернуться:

аа, bb, cc, 2009-01-22 00:00:00.000
ab, bc, cd, 2009-04-30 09:23:07.090

Ваш запрос тоже будет работать, значит, что-то действительно не так, или вы неправильно сообщили точную природу своего кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top