累计和最大日期组按月和年份

时间:2018-03-22 15:48:04

标签: mysql sql date

现在我需要进行类似的查询,但需要几个标准 这是我的表

`transaksi` (`transid`, `idpinj`, `tanggal`,`sisapokok`, `sisajasa`
(1, 1, '2018-01-01', 1000, 100, 1),
(2, 1, '2018-01-05', 1000, 100, 3),
(3, 2, '2018-02-04', 1000, 100, 4),
(4, 2, '2018-02-08', 1000, 100, 5),
(5, 1, '2018-02-19', 1000, 100, 3),
(6, 3, '2018-02-22', 1000, 100, 2),
(7, 2, '2018-03-09', 1000, 100, 3),
(8, 3, '2018-03-10', 1000, 100, 3)
(9, 3, '2018-03-12', 1000, 100, 4)
(10, 1, '2018-03-17', 1000, 100, 4)
(11, 4, '2018-03-19', 1000, 100, 3)
(12, 2, '2018-03-20', 1000, 100, 4)

DB Fiddle table

从上表中我需要输出如下

Month         sisapokok    sisajasa
Jan-2018      1000         100       ->row2
Feb-2018      4000         400       ->+ row3+5
Mar-2018      12000        1200      ->+ row9+10+11+12   
  • 首先,我需要为每个idpinj获得总和(sisapokok)和总和(sisajasa),其中日期为最大(tanggal),状态在3和4之间。此值然后总和为每月总数
  • 过去12个月每月累计累积金额

我尝试此查询,但它从所有记录中获取max(日期),而不是按月和每个idpinj的最大值(日期)。

SELECT  a.idpinj,a.sisapokok
FROM    transaksi a
        INNER JOIN 
        (
            SELECT  idpinj, MAX(tanggal) tgl
            FROM    transaksi
            GROUP BY idpinj
        ) b ON a.idpinj = b.idpinj
                AND a.tanggal = b.tgl  
ORDER BY `a`.`idpinj` ASC

2 个答案:

答案 0 :(得分:0)

不确定您要求的是什么,但看看这是否有帮助:

select monthyear, sum(sisapokok)sisapokok, sum(sisajasa)sisajasa from (
select   cast(month(tanggal) as varchar)+'-'+cast(year(tanggal) as varchar) monthyear, sum(sisapokok)sisapokok, sum(sisajasa)sisajasa
from #transaksi
 group by  cast(month(idpinj) as varchar)+'-'+cast(year(tanggal) as varchar) , tanggal) a
 group by monthyear

答案 1 :(得分:0)

基于小提琴数据

{{1}}

请注意,内部查询会查找最后一个相关ID,并且代码会向外推进以使用变量来计算运行总计。