Как получить последнюю запись из таблицы SQL Server на основе отметки времени
Я пытаюсь получить последнюю запись из таблицы на основе отметки времени. Он запрос, который я написал:
SELECT DISTINCT
[Year],
[Type],
[Category],
[AnnualCost],
MAX([TimeStamp]) OVER (PARTITION BY [Year], [Type], [Category], [AnnualCost]) AS MaxTimeStamp
FROM
[PromOneSite].[Budgeting].[MISBasePrice]
WHERE
Year = 2016
AND category IN ('Leasing Office Desktop')
AND TimeStamp IS NOT NULL
Результат:
Year Type Category AnnualCost MaxTimeStamp
----------------------------------------------------------------------------
2016 Equipment Hardware Location Leasing Office Desktop 750.00 2015-10-14 17:54:09.510
2016 Equipment Hardware Location Leasing Office Desktop 850.00 2015-10-14 17:54:20.630
Я получаю эти две записи с разным количеством и разными временными метками. Я знаю, что это потому, что я указал в запросе, что это приносит мне и годовую стоимость. Но без отчетливого я получаю около 30+ повторяющихся записей.
Как можно просто получить только одну запись с последней отметкой времени в этом сценарии.
заранее спасибо
2 ответа
Решение
select * from
( SELECT [Year]
,[Type]
,[Category]
,[AnnualCost]
,[TimeStamp] as MaxTimeStamp
,row_number() over (partition by [Year], [Type], [Category] order by [TimeStamp] desc ) as rn
FROM [PromOneSite].[Budgeting].[MISBasePrice]
where Year = 2016
and category IN ('Leasing Office Desktop')
and TimeStamp IS Not Null
) tt
where tt.rn = 1
SELECT top 1 distinct [Year] ,[Type] ,[Category] ,[AnnualCost] ,max([TimeStamp]) over (partition by [Year],[Type],[Category], [AnnualCost] ) as MaxTimeStamp FROM [PromOneSite].[Budgeting].[MISBasePrice] where Year = 2016 and category IN ('Leasing Office Desktop') order by [TimeStamp] DESC