gpt4 book ai didi

mysql - 一段时间内的不同计数

转载 作者:行者123 更新时间:2023-11-30 22:20:09 26 4
gpt4 key购买 nike

我有一个由 user_id、action_date 组成的简单表

user_id    action_date
user_001 2016-04-15
user_002 2016-04-15
user_003 2016-04-15
user_002 2016-04-15
user_001 2016-04-15
user_004 2016-04-16
user_005 2016-04-16
user_001 2016-04-16
user_001 2016-04-16
user_001 2016-04-16

对于数据库中的每个 action_date,我需要检查在从该 action_date 倒数的 30 天内有多少不同的用户处于事件状态。

我知道我必须为每个 action_date 返回 30 天并计算该期间的不同活跃用户,我尝试过类似的方法,但它并没有像预期的那样工作,因为我需要每 30 天的不同计数进行 action_date 的天数

SELECT action_date, COUNT (DISTINCT user_id) from Table_1 where user_id IN
(SELECT user_id from Table_1
WHERE action_date Between DATEADD(day,-30,action_date) and action_date)
GROUP BY action_date

最佳答案

听起来您需要为每个不同的 action_date 分配一个数字在你的 table 上。

因此,首先您需要一个显示操作日期的虚拟表。

  SELECT DISTINCT action_date FROM Table_1

然后您需要以选择 30 天范围的方式将该虚拟表连接到您的原始表:

  SELECT a.action_date, b.user_id
FROM (
SELECT DISTINCT action_date FROM Table_1
) a
LEFT JOIN Table_1 b ON b.action_date >= a.action_date - INTERVAL 29 DAY
AND b.action_date <= a.action_date

然后您需要汇总此结果。

  SELECT a.action_date, COUNT(DISTINCT b.user_id) user_count
FROM (
SELECT DISTINCT action_date FROM Table_1
) a
LEFT JOIN Table_1 b ON b.action_date >= a.action_date - INTERVAL 29 DAY
AND b.action_date <= a.action_date
GROUP BY a.action_date
ORDER BY a.action_date

我一步一步地写出来,希望您能了解如何使用结构化查询语言的结构化方面构建您的查询。

在编写这样的查询时,对沿途的每个步骤进行故障排除也很有帮助。如果你把整个事情都写出来,就很难找到问题。

( - INTERVAL 29 DAY?您要求的是 30 天的范围。我已经包括了相关日期和之前的 29 天。)

请注意,如果您的 action_dates 是 DATETIME项,您需要进行一些更改。

  SELECT DATE(a.action_date) action_date, 
COUNT(DISTINCT b.user_id) user_count
FROM (
SELECT DISTINCT DATE(action_date) action_date FROM Table_1
) a
LEFT JOIN Table_1 b ON b.action_date >= a.action_date - INTERVAL 29 DAY
AND b.action_date < a.action_date + INTERVAL 1 DAY
GROUP BY DATE(a.action_date)
ORDER BY DATE(a.action_date)

注意日期范围,当您使​​用 DATETIME 时项目,一直运行到但不包括 ( < ) 结束日期 ( action_date + INTERVAL 1 DAY ) 那天的午夜。

关于mysql - 一段时间内的不同计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36862337/

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