gpt4 book ai didi

MySQL查询计算特定日期范围内的用户保留

转载 作者:行者123 更新时间:2023-11-29 05:51:20 25 4
gpt4 key购买 nike

我正在尝试选择保留在特定日期范围内的用户数,并且使用此查询和下表成功:

+----------+-------------+
| Field | Type |
+----------+-------------+
| id | varchar(17) |
| log_date | date |
+----------+-------------+

SELECT last_day.log_date, COUNT(distinct last_day.id) as users_num
FROM (SELECT DISTINCT log_date, id
FROM `userActivity`) this_day
JOIN (SELECT DISTINCT log_date, id
FROM `userActivity`) last_day
ON this_day.id = last_day.id
AND this_day.log_date = "2018-10-01"
AND last_day.log_date BETWEEN "2018-10-01" AND "2018-10-30"
GROUP BY log_date;

但我面临的问题是我想假设日期范围内的每一天都是第 0 天。(类似于以下示例):

Note that the first row is the avg of the below results I need to calculate

请注意,图片中的第一行是我需要计算的以下结果的平均值。任何人都知道如何增强我的查询以获得如图所示的结果?

最佳答案

此解决方案仅适用于 MySQL 8.x,因为它需要 CTE(通用表表达式):

with digits as (
select 0 as n union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8 union select 9
),
series as (
select d1.n * 100 + d2.n * 10 + d3.n as n -- number series from 0 to 999
from digits d1
cross join digits d2
cross join digits d3
)
SELECT last_day.log_date, COUNT(distinct last_day.id) as users_num,
date_add("2018-10-01", interval s.n day) as current_start
FROM (SELECT DISTINCT log_date, id
FROM `userActivity`) this_day
JOIN (SELECT DISTINCT log_date, id
FROM `userActivity`) last_day
ON this_day.id = last_day.id
cross join series s
WHERE s.n <= 30
AND this_day.log_date = date_add("2018-10-01", interval s.n day)
AND last_day.log_date BETWEEN date_add("2018-10-01", interval s.n day)
AND date_add("2018-10-30", interval s.n day)
GROUP BY log_date, date_add("2018-10-01", interval s.n day);

关于MySQL查询计算特定日期范围内的用户保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875544/

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