2015-10-16 62 views
0

我想從基於時間戳的表中獲取最新記錄。他是我的查詢中寫道:如何根據時間戳從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 

我得到這兩個記錄與不同數量,不同的時間戳。我知道這是因爲我在查詢中加入了獨特的內容,它爲我帶來了獨特的Annualcost。但沒有明顯的我會得到大約30多重複記錄。

在這種情況下,如何才能獲得最新的時間戳只有一條記錄。

在此先感謝

回答

1
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 
+0

這工作就像一個魅力!非常感謝! – svon

0
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 
相關問題