SQL统计连续5天访问网站的用户 - 海量数据分析
要解决这个问题,可以使用窗口函数来对数据进行分组和排序,并利用日期函数来判断是否存在连续5天的上网记录。
以下是一个示例的SQL查询,假设表名为'access_records',字段名为'time'、'user_id'和'url':
WITH ranked_records AS (
SELECT
user_id,
time,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY time) AS rn
FROM
access_records
ORDER BY
user_id, time
),
consecutive_records AS (
SELECT
user_id,
time,
DATE_TRUNC('day', time) AS day,
DATE_TRUNC('day', LAG(time) OVER (PARTITION BY user_id, DATE_TRUNC('day', time) ORDER BY time)) AS prev_day
FROM
ranked_records
)
SELECT
user_id
FROM
consecutive_records
GROUP BY
user_id, day
HAVING
COUNT(*) >= 5
AND COUNT(DISTINCT prev_day) = 1;
此查询使用两个CTE(公共表表达式)来处理数据。首先,'ranked_records'对记录进行分组,并为每个用户的记录添加一个连续编号。然后,'consecutive_records'使用窗口函数LAG来查找前一天的记录,并将时间戳截断为天。
最后,查询从'consecutive_records'中选择具有连续5天记录的用户,并检查前一天的日期是否是相同的(即连续)。
请注意,这只是一个示例查询,具体实现可能因数据库类型和表结构而有所不同。你需要根据自己的情况进行调整和优化。
原文地址: https://www.cveoy.top/t/topic/o6F0 著作权归作者所有。请勿转载和采集!