MySQL 每个月的每日 运行 总计
Daily running total for each month in MySQL
我有一个包含每日计数数据的 table,看起来像这样:
Date Count
2019-12-01 100
2019-12-02 200
2019-12-03 300
... ...
2020-01-01 10
2020-01-02 200
2020-01-03 500
我正在尝试计算每个 月每天 的 运行 总数。期望的结果应如下所示:
Date Count Running Total
2019-12-01 100 100
2019-12-02 200 300
2019-12-03 300 600
... ...
2020-01-01 10 10
2020-01-02 200 210
2020-01-03 500 710
...
我设法计算了一个月的 运行 总数,但是我很难通过单个查询获得多个月的 运行 总数。任何人都知道如何做或可以提供仅使用 SQL 的想法?我是运行MySQL5.7。
最佳
SELECT SUM(Count) AS "Total count" FROM your_table WHERE Date < '2019-12-01';
显然,日期是您要检查的任何日期。
您可以使用像
这样的会话变量
CREATE TABLE table1
(`Date` date, `Count` int)
;
INSERT INTO table1
(`Date`, `Count`)
VALUES
('2019-12-01', 100),
('2019-12-02', 200),
('2019-12-03', 300),
('2020-01-01', 10),
('2020-01-02', 200),
('2020-01-03', 500)
;
✓
✓
SELECT
`Date`
, `Count`
,running_coint
FROM
(SELECT
`Date`
, `Count`
, IF(MONTH(@date) = MONTH(`Date`),@running_coint := @running_coint + `Count`,@running_coint := `Count`) running_coint
, @date := `Date`
FROM (SELECT * FROM table1 ORDER BY `Date`) t,(SELECT @running_coint := 0) a,(SELECT @date := '1999-01-01') b) t1
ORDER BY`Date`;
Date | Count | running_coint
:--------- | ----: | ------------:
2019-12-01 | 100 | 100
2019-12-02 | 200 | 300
2019-12-03 | 300 | 600
2020-01-01 | 10 | 10
2020-01-02 | 200 | 210
2020-01-03 | 500 | 710
db<>fiddle here
我有一个包含每日计数数据的 table,看起来像这样:
Date Count
2019-12-01 100
2019-12-02 200
2019-12-03 300
... ...
2020-01-01 10
2020-01-02 200
2020-01-03 500
我正在尝试计算每个 月每天 的 运行 总数。期望的结果应如下所示:
Date Count Running Total
2019-12-01 100 100
2019-12-02 200 300
2019-12-03 300 600
... ...
2020-01-01 10 10
2020-01-02 200 210
2020-01-03 500 710
...
我设法计算了一个月的 运行 总数,但是我很难通过单个查询获得多个月的 运行 总数。任何人都知道如何做或可以提供仅使用 SQL 的想法?我是运行MySQL5.7。
最佳
SELECT SUM(Count) AS "Total count" FROM your_table WHERE Date < '2019-12-01';
显然,日期是您要检查的任何日期。
您可以使用像
这样的会话变量CREATE TABLE table1 (`Date` date, `Count` int) ; INSERT INTO table1 (`Date`, `Count`) VALUES ('2019-12-01', 100), ('2019-12-02', 200), ('2019-12-03', 300), ('2020-01-01', 10), ('2020-01-02', 200), ('2020-01-03', 500) ;
✓ ✓
SELECT `Date` , `Count` ,running_coint FROM (SELECT `Date` , `Count` , IF(MONTH(@date) = MONTH(`Date`),@running_coint := @running_coint + `Count`,@running_coint := `Count`) running_coint , @date := `Date` FROM (SELECT * FROM table1 ORDER BY `Date`) t,(SELECT @running_coint := 0) a,(SELECT @date := '1999-01-01') b) t1 ORDER BY`Date`;
Date | Count | running_coint :--------- | ----: | ------------: 2019-12-01 | 100 | 100 2019-12-02 | 200 | 300 2019-12-03 | 300 | 600 2020-01-01 | 10 | 10 2020-01-02 | 200 | 210 2020-01-03 | 500 | 710
db<>fiddle here