SQL统计连续5天有上网记录的用户(亿级数据)
假设表名为access_log,包含字段access_time(访问时间)、user_id(用户ID)和url(访问的URL)。可以使用以下SQL查询来统计连续5天有上网记录的人:
SELECT user_id
FROM (
SELECT user_id, DATE(access_time) AS date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY access_time) AS rn
FROM access_log
WHERE access_time >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)
) AS subquery
WHERE rn >= 5
GROUP BY user_id
HAVING COUNT(DISTINCT date) >= 5;
此查询首先筛选出一个月内的数据,然后使用窗口函数ROW_NUMBER()来为每个用户的访问记录编号,并且按访问时间升序排列。接下来,在子查询中,选取连续5天及以上的记录,并按user_id进行分组。最后,通过HAVING子句筛选出连续5天有上网记录的人。
请注意,此查询假设access_time字段的数据类型为日期时间类型,如果不是,请根据实际情况修改查询语句。
原文地址: https://www.cveoy.top/t/topic/o4dA 著作权归作者所有。请勿转载和采集!