gpt4 book ai didi

MySQL - 获取最近 1 天、7 天、30 天的聚合,并允许将记录计入超过 1 组

转载 作者:行者123 更新时间:2023-11-28 23:12:34 25 4
gpt4 key购买 nike

我有一个包含以下数据的表:

enter image description here

我希望将行分组为以下几行:

  • 在最后一天内(过去 24 小时内的所有内容)
  • 在过去 7 天内(上周内的所有内容)
  • 过去 30 天内(过去一个月内的所有内容)

上述行的最终结果类似于:

enter image description here

我现在可以将记录分组到这些括号中:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com