Отфильтровать только последние записи для заказов

Я пытаюсь написать запрос, в котором я выбираю последние изменения в определенном порядке в таблице заказов, например.

OrderID|       ChangeDate      | 
-------|-----------------------|
Order1 |2013-03-17 14:40:47.000|
Order2 |2013-03-12 12:34:09.000|
Order3 |2013-03-20 18:30:12.000|
Order1 |2013-03-20 16:09:09.000|
Order2 |2013-03-20 12:39:49.000|

Скажите (из приведенного выше примера), что мне нужны последние записи Order1, Order2 и Order3. Кто-нибудь был в подобной ситуации? Я искренне благодарен за вашу помощь!


person gberisha    schedule 20.03.2013    source источник


Ответы (3)


Попробуй это:

Select OrderID,max(ChangeDate) as LatestDate
from yourTable
group by OrderID
person praveen    schedule 20.03.2013

Вы можете просто сделать это:

SELECT OrderID,
       MAX(ChangeDate) as LatestEntry
FROM yourTable
GROUP BY OrderID
person Praveen Nambiar    schedule 20.03.2013

Существует несколько подходов, но если вам нужна вся запись, а не только max( date) для каждого идентификатора заказа, вы можете использовать row_number.

WITH CTE
(
SELECT 
  OrderID, 
  changeDate, 
  ChangeValue,
  ROW_NUMBER() OVer (Partition BY OrderID order by ChangeDate Desc) rn

FROM order 
)
SELECT * FROM CTE where rn = 1

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

person Conrad Frix    schedule 20.03.2013
comment
запятую между partition и order by необходимо удалить. - person Ed Gibbs; 20.03.2013