2016-09-14 79 views
1

我有以下的數據集,我試圖以使用一排秩邏輯得到輸出提到如下:分區數據

declare @data table 
     ( 
      identifier int, 
      value float, 
      dateValue datetime 
     ) 
insert into @data values(1 , 100 ,'2016-08-09 11:00:00.000') 
insert into @data values(1 , 150 ,'2016-08-09 11:00:00.000') 
insert into @data values(1 , 200 ,'2014-08-09 11:00:00.000') 
insert into @data values(2 , 400 ,'2016-08-09 11:00:00.000') 
insert into @data values(2 , 300 ,'2012-08-09 11:00:00.000') 

輸出我期待是:回暖值列的第一個值基於給定ID的最新日期和給定ID的聚合。

id Value AggValue   Date 
1 100  450   2016-08-09 11:00:00.000 
2 400  700   2016-08-09 11:00:00.000 

我嘗試使用下面的查詢得到類似的產量,但我無法弄清楚如何計算Aggvalue在同一個查詢

SELECT identifier,value,dateValue FROM 
     (SELECT identifier,value,dateValue, 
     ROW_NUMBER() OVER (PARTITION BY t.identifier ORDER BY t.dateValue DESC) AS [Rank] 
     FROM @data t) AS [sub] 
     where [sub].[Rank] = 1 
+3

術語「分區」是通常用於描述一個單一的表中的不同的「子表」的行的物理存儲。它不用於描述窗口函數中'partition by'條件的用法。 –

+0

我想你想要這個。 SELECT標識符,值,dateValue從 (SELECT標識符,值,日期值,總和(值)作爲AggValue FROM @data t)AS [sub] group標識符 –

回答

4

使用SUM() OVER

​​

結果:

id   value     AggValue    dateValue 
----------- ---------------------- ---------------------- ----------------------- 
1   100     450     2016-08-09 11:00:00.000 
2   400     700     2016-08-09 11:00:00.000 
+0

我喜歡'SELECT TOP 1 WITH TIES' ! – Shnugo

0

你只錯過SUM(值)

SELECT 
    identifier, 
    value, 
    dateValue 
FROM 
(
    SELECT 
     identifier, 
     dateValue, 
     SUM(VALUE) OVER(PARTITION BY t.identifier ORDER BY t.identifier) AS Value, 
     ROW_NUMBER() OVER (PARTITION BY t.identifier ORDER BY t.dateValue DESC) AS [Rank] 
    FROM @data t 
) AS [sub] 
where [sub].[Rank] = 1