我有一个包含以下数据的表:
我希望将行分组为以下几行:
- 在最后一天内(过去 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 - 获取最近 1 天、7 天、30 天的聚合,并允许将记录计入超过 1 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45290501/