如何编写查询以按月和年获取累计总和组?

时间:2019-06-01 05:40:46

标签: mysql

我有下表

id      Dates           Amount
1   20170221    -192161
2   20170222    884
3   20170223    -74
4   20170227    961
5   20170321    -292161
6   20170322    994
7   20170323    -44
8   20170327    691

我希望输出如下

id      Dates           Amount   Cumulative
1   20170221    -192161   -192161
2   20170222    884   -191277
3   20170223    -74   -191351
4   20170227    961   -190390
5   20170321    -292161   -482551
6   20170322    994   -481557
7   20170323    -44   -481601
8   20170327    691   -480910

我已经写了这个查询,但是没有得到想要的输出

select id
     , DATE_FORMAT(Dates,'%b-%Y')Dates
     , Amount
     , @total := @total + Amount as cumulative_sum
  from mytable
     , (Select @total := 0) as total;

当我按月申请子句时,我想获得当月全天的累计金额,它只返回我当月的第一行

1 个答案:

答案 0 :(得分:1)

一个适用于所有MySQL版本的选项是使用相关的子查询来查找累积和:

SELECT
    id,
    Dates,
    Amount,
    (SELECT SUM(t2.Amount) FROM yourTable t2 WHERE t2.id <= t1.id) Cumulative
FROM yourTable t1
ORDER BY id;

如果您使用的是MySQL 8+,那么我们可以尝试使用SUM作为分析函数:

SELECT
    id,
    Dates,
    Amount,
    SUM(Amount) OVER (ORDER BY id) Cumulative
FROM yourTable
ORDER BY id;