[英]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.