我有一张表,上面有以下数据:
我希望将行分组如下:
最后一天内(过去24小时内的所有内容)
最近7天内(上周内)
最近30天内(上个月内)
上述行的最终结果如下:
我现在可以用以下方法将记录分组到这些括号中:
SELECT (CASE WHEN created_at = CURDATE() THEN '1 Day'
WHEN created_at >= CURDATE() - INTERVAL 6 DAY THEN '7 Days'
WHEN created_at >= CURDATE() - INTERVAL 29 DAY THEN '30 Days'
END) AS Timeframe, COUNT(*) AS Count
FROM my_table
GROUP BY (CASE WHEN created_at = CURDATE() THEN '1 Day'
WHEN created_at >= CURDATE() - INTERVAL 6 DAY THEN '7 Days'
WHEN created_at >= CURDATE() - INTERVAL 29 DAY THEN'30 Days'
END)
但这将防止个人记录被多次计算。例如,第一张图片中的第2行和第3行需要计算在所有三个括号中(1天、7天和30天),而第6行到第9行只需要计算在30天括号中。
你会怎么处理MySQL呢?
最佳答案
最简单的做法是列而不是行:
SELECT SUM(created_at = CURDATE()) as today
SUM(created_at >= CURDATE() - INTERVAL 6 DAY) as last_7_days,
SUM(created_at >= CURDATE() - INTERVAL 29 DAY) as last_30_days,
SUM(created_at < CURDATE() - INTERVAL 29 DAY) as older
FROM my_table;
关于mysql - MySQL-获取过去1天,7天,30天的聚合,并允许对超过1组的记录进行计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45290501/