SQL 服务器中的分区数据

Partitioning data in SQL Server

我有以下数据集,我正在尝试使用行排序逻辑以获得下面提到的输出:

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

使用SUM() OVER:

SELECT TOP 1 WITH TIES identifier id,value,SUM(value) OVER (PARTITION BY identifier) AggValue,dateValue
FROM @data
ORDER BY ROW_NUMBER() OVER (PARTITION BY identifier ORDER BY datevalue DESC)

结果:

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

您只是错过了 SUM(value):

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