运行 MySQL 中日期的总和

Running sum over date in MySQL

我有这个 table,其中 id_user=7

TABLE

7    2018-11-12
7    2018-11-12
7    2018-11-13
7    2018-11-13
7    2018-11-13
7    2018-11-13
7    2018-11-14
7    2018-11-15
7    2018-11-15
7    2018-11-15
7    2018-11-15
7    2018-11-15
7    2018-11-16
7    2018-11-16
7    2018-11-16
7    2018-11-16
7    2018-11-16
7    2018-11-16
7    2018-11-16

我想return用户一天出现的次数,以及前几天的累计总和

到目前为止我已经试过了...

SELECT COUNT(*)
FROM posts
WHERE id_user='7'
GROUP BY DATE(date) 

预期输出

 day 12/11/2018 > 2 (2)
 day 13/11/2018 > 4 (6)
 day 14/11/2018 > 1 (7)
 day 15/11/2018 > 5 (12)
 day 16/11/2018 > 7 (19)

如何获取括号之间的数字?

运行 没有任何 window 函数或用户变量的求和需要将 table 与其自身连接起来并找出排名低于当前的行。这是一个昂贵的操作,但比用户变量更可靠。

SELECT main.id_user, main.date, main.c AS today_count, main.c + COUNT(prev.date) AS running_count
FROM (
    SELECT id_user, date, COUNT(*) AS c
    FROM posts
    GROUP BY id_user, date
) AS main
LEFT JOIN posts AS prev ON prev.id_user = main.id_user AND prev.date < main.date
GROUP BY main.id_user, main.date, main.c
ORDER BY main.date DESC

有多种方法可以编写上述查询,有些方法可能比其他方法稍微高效一些,但预计在更大的数据集上不会出现奇迹。

Demo on DB Fiddle