我一直在尝试进行“按日期排序”的运行总计。问题是,如果您有两个具有相同日期的条目,那么它会在两行中显示相同的总数。
表结构是这样的
sipID|Date|Amount
1|2017-11-07|2
2|2017-11-09|27
3|2017-11-07|24
所以我知道如何像这样按 id 进行累计。
SELECT `sipID`,DATE_FORMAT(`Date`,'%d %M %Y') as `DateFormat`,`Amount`,
(SELECT SUM(`Amount`) FROM `salesinvoice_payments` as `Lin` WHERE `Lin`.`sipID`<=`Lout`.`sipID` && `salesinvoice_id`=115) as `Balance`
FROM `salesinvoice_payments` as `Lout`
WHERE `salesinvoice_id`=115
ORDER BY `sipID`
但我希望它按日期升序排序,所以我这样做了
SELECT `sipID`,DATE_FORMAT(`Date`,'%d %M %Y') as `DateFormat`,`Amount`,
(SELECT SUM(`Amount`) FROM `salesinvoice_payments` as `Lin` WHERE `Lin`.`Date`<=`Lout`.`Date` && `salesinvoice_id`=115) as `Balance`
FROM `salesinvoice_payments` as `Lout`
WHERE `salesinvoice_id`=115
ORDER BY `Date` ASC
现在这确实有效。当您有 2 行具有相同的日期时,就会出现问题。然后发生的是两行具有相同的运行总计。 例如
07 November 2017 2.00 24.00
07 November 2017 22.00 24.00
09 November 2017 3.00 27.00
我要的是这个
07 November 2017 2.00 2.00
07 November 2017 22.00 24.00
09 November 2017 3.00 27.00
是否有解决方法,以便我可以获得正确的运行总计,并按日期排序,而不会在同一日期获得相同的总计?
编辑: @草莓: 我终于弄清楚了 sqlfiddle 是如何工作的,并将其作为我最初的问题。 http://www.sqlfiddle.com/#!9/c6dc75/1
最佳答案
您需要一些东西来将 Ammount 与同一天分开。
SELECT `sipID`,
DATE_FORMAT(`Date`,'%d %M %Y') as `DateFormat`,
`Amount`,
(SELECT SUM(`Amount`)
FROM `salesinvoice_payments` as `Lin`
WHERE `Lin`.`Date` < `Lout`.`Date`
OR (`Lin`.`Date` = `Lout`.`Date`
AND `Lin`.`sipID` <= `Lout`.`sipID`)
) as `Balance`
FROM `salesinvoice_payments` as `Lout`
ORDER BY `Date` ASC
输出
关于mysql运行总计,按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47267690/