mysql运行总计,按日期排序

标签 mysql

我一直在尝试进行“按日期排序”的运行总计。问题是,如果您有两个具有相同日期的条目,那么它会在两行中显示相同的总数。

表结构是这样的

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 与同一天分开。

SQL DEMO

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

输出

enter image description here

关于mysql运行总计,按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47267690/

相关文章:

mysql - 使用命令行更改mysql用户密码

mysql - 如何导出mysql每个表的N条记录?

mysql - 使用 OR 选择多行

php - 在 select mysql 上连接数据和文本

javascript - Node.js MySQL 连接问题

php - 计算每行中真值的个数

Mysql/jsp 更新查询

php - Ajax PHP 插入 MySQL utf-8 字符不起作用

mysql - Debian,mysql : How can I tune these values

php - 如何根据纬度和经度获取给定范围内的所有点?