我有一张表,上面有以下数据:
mysql - MySQL-获取过去1天,7天,30天的聚合,并允许对超过1组的记录进行计数-LMLPHP
我希望将行分组如下:
最后一天内(过去24小时内的所有内容)
最近7天内(上周内)
最近30天内(上个月内)
上述行的最终结果如下:
mysql - MySQL-获取过去1天,7天,30天的聚合,并允许对超过1组的记录进行计数-LMLPHP
我现在可以用以下方法将记录分组到这些括号中:

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/

10-13 00:47