运行 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
有多种方法可以编写上述查询,有些方法可能比其他方法稍微高效一些,但预计在更大的数据集上不会出现奇迹。
我有这个 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
有多种方法可以编写上述查询,有些方法可能比其他方法稍微高效一些,但预计在更大的数据集上不会出现奇迹。