Как получить последнюю запись из таблицы 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
Другие вопросы по тегам