繁体   English   中英

在SQL Server中对数据进行分区

[英]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的汇总,为Value列选择第一个值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM