按日期分组不能按预期工作

时间:2019-04-17 09:05:29

标签: sql sql-server

我有四列,参考,日期,金额和运行总额,并且我一天有多条记录,并且我尝试按日期分组,所以我只能看到一个包含所有金额和运行总额的日期。 / p>

我主要尝试以不同的方式将其分组在一起,但按我的预期无法正常工作。

    SELECT [REF], [DATE], [AMOUNT], SUM(AMOUNT) OVER (PARTITION BY [DATE] ORDER BY [REF]) AS 'Running Total' FROM stageRecords
                WHERE [Accounts] != ''
                GROUP BY [REF], [DATE], [AMOUNT]

一些数据如下:

ref    -    date  -    amount  -  running total    
1283    2018-04-23    -6769.13    338.46   
1284    2018-04-23   -338.46      5.6843418860808E-14  
109     2018-05-22    12328.58    12328.58   
110     2018-05-22    616.43      12945.01    
501     2018-05-22   -12328.58    616.43

希望查看具有单个日期的记录,并计算出金额和运行总额。

2 个答案:

答案 0 :(得分:0)

从汇总中删除Amount,而是使用SUM(AMOUNT)作为要与第二个SUM用作分析函数求和的数量。

SELECT
    [REF],
    [DATE],
    SUM(SUM(AMOUNT)) OVER (PARTITION BY [DATE] ORDER BY [REF]) AS 'Running Total'
FROM stageRecords
WHERE [Accounts] != ''
GROUP BY [REF], [DATE];

上面的查询很有意义,因为分析函数是基于集合的,并且在GROUP BY聚合之后 进行评估。当聚合结束时,SUM(AMOUNT)可用,因此没有理由不能将其用作分析函数的输入。

答案 1 :(得分:0)

您似乎想要:

SELECT sr.[DATE],
       SUM(SUM(AMOUNT)) OVER (ORDER BY [DATE]) AS Running_Total
FROM stageRecords sr
WHERE Accounts <> ''
GROUP BY [DATE]
ORDER BY [DATE];

如果您希望每个日期显示一行,则该行应该是GROUP BY中的唯一列。