我有这张桌子,其中id_user = 7



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


我想返回用户按天显示的时间以及前几天的累计总和

到目前为止,我已经尝试过...

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)


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

最佳答案

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

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

关于mysql - 在MySQL中运行超过日期的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53351416/

10-09 02:28