首页 > 解决方案 > SQL Server 按日期分组

问题描述

SELECT [DATE], [AMOUNT], SUM(AMOUNT) OVER (ORDER BY DATE) AS 'Running Total' 
FROM PeopleActi
WHERE INSTANCE = 'Bank' 
AND DATE IS NOT NULL 
GROUP BY [DATE], [AMOUNT];

在上面的代码中,我选择了用户的日期、金额,以及"SUM(AMOUNT) OVER (ORDER BY DATE) AS 'Running Total'"他们在一段时间内的总成本。当我运行此代码时,我得到以下结果:

DATE       AMOUNT  Running Total
2018-10-05  100     100
2018-10-06  1000    1100
2018-10-07  5000    6100
2018-10-08  2000    8100
2018-10-09  1000    9100
2018-10-10  5000    14100
2018-10-11  3000    25100
2018-10-11  8000    25100

这很好用,但我的问题是最后两行。我希望他们按日期分组,并且有两天的总金额,所以应该是:

 Date       Amount   Running Total
2018-10-11   11000    25100

有谁知道这是如何实现的?我[DATE]的类型是 DATE。

更新!!!!

我看过你的一些解决方案,它们很好,但重要的是我也显示了 AMOUNT 和 Running Total 金额,所以最终结果应该是......

DATE       AMOUNT  Running Total
2018-10-05  100     100
2018-10-06  1000    1100
2018-10-07  5000    6100
2018-10-08  2000    8100
2018-10-09  1000    9100
2018-10-10  5000    14100
2018-10-11  11000   25100

感谢大家到目前为止的帮助!

标签: sqlsql-server

解决方案


将金额分组,然后进行累计

WITH CTE
AS
(
    SELECT  A.Dt,
            SUM(A.Amount) AS Amount
    FROM    (
                VALUES  ('2018-10-05',100),
                        ('2018-10-06',1000),
                        ('2018-10-07',5000),
                        ('2018-10-08',2000),
                        ('2018-10-09',1000),
                        ('2018-10-10',5000),
                        ('2018-10-11',3000),
                        ('2018-10-11',8000)
            ) AS A(Dt,Amount)
    GROUP   BY A.Dt
)
SELECT  C.Dt,
        C.Amount,
        SUM(C.Amount) OVER (ORDER BY C.Dt) AS CumTotal
FROM    CTE AS C;

推荐阅读