【问题标题】:How to find cumulative sum between two dates in MySQL?如何在 MySQL 中查找两个日期之间的累积和?
【发布时间】:2021-06-10 16:01:26
【问题描述】:

如何在考虑到先前状态的情况下找到两个日期之间的累积和?

设置WHERE 条件

WHERE date BETWEEN '2021-02-19 12:00:00'AND '2021-02-21 12:00:00';

不做这项工作,因为总和从第一个条件的日期开始,而不是从第一条记录开始。我想只选择整个查询的一部分(两个日期之间),但要从第一个(初始)状态计算累积总和。

我准备好了Fiddle

CREATE TABLE `table1` (
  `id` int(11) NOT NULL,
  `date` datetime NOT NULL DEFAULT current_timestamp(),
  `payment` double NOT NULL
);

INSERT INTO `table1` (`id`, `date`, `payment`) VALUES
(1, '2021-02-16 12:00:00', 100),
(2, '2021-02-17 12:00:00', 200),
(3, '2021-02-18 12:00:00', 300),
(4, '2021-02-19 12:00:00', 400),
(5, '2021-02-20 12:00:00', 500),
(6, '2021-02-21 12:00:00', 600),
(7, '2021-02-22 12:00:00', 700);
 version();
SELECT DATE_FORMAT(date, "%Y-%m-%d") AS date, 
payment, SUM(payment) OVER(ORDER BY id) AS balance 
FROM table1
WHERE date BETWEEN '2021-02-19 12:00:00'AND '2021-02-21 12:00:00';

【问题讨论】:

  • 您的预期结果是什么?
  • 1000, 1500, 2100

标签: mysql sum subquery window-functions


【解决方案1】:

你必须在得到累计和后过滤表格:

SELECT *
FROM (
  SELECT DATE(date) AS date, 
         payment, 
         SUM(payment) OVER(ORDER BY id) AS balance 
  FROM table1
) t 
WHERE date BETWEEN '2021-02-19'AND '2021-02-21';

或:

SELECT *
FROM (
  SELECT DATE(date) AS date, 
         payment, 
         SUM(payment) OVER(ORDER BY id) AS balance 
  FROM table1
  WHERE DATE(date) <= '2021-02-21'
) t 
WHERE date >= '2021-02-19';

请参阅demo
结果:

date payment balance
2021-02-19 400 1000
2021-02-20 500 1500
2021-02-21 600 2100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多