【问题标题】:Daily running total for each month in MySQL [duplicate]MySQL中每个月的每日运行总计[重复]
【发布时间】:2020-05-13 07:54:20
【问题描述】:

我有一张包含每日计数数据的表格,如下所示:

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 来做吗?我正在运行 MySQL 5.7。

最好的

【问题讨论】:

  • 在 DB ver.8 中更容易计算。考虑升级。
  • 我在 Google Cloud 上使用 MySQL - 版本 8 不可用。

标签: mysql sql mysql-5.7


【解决方案1】:

您可以使用 Session 变量,例如

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`;
日期 |计数 | 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小提琴here

【讨论】:

    【解决方案2】:
    SELECT SUM(Count) AS "Total count" FROM your_table WHERE Date < '2019-12-01';
    

    显然日期是您想要查看的日期。

    【讨论】:

      猜你喜欢
      • 2016-11-16
      • 2017-05-14
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多