SQL统计连续5天有上网记录的用户 - 亿级数据优化
假设表名为access_logs,字段包括access_time(访问时间),user_id(用户ID),url(访问URL)。\n\n下面是一种可能的SQL查询,用于从一个月的数据中统计出连续5天有上网记录的人:\n\nsql\nSELECT user_id\nFROM (\n SELECT user_id, DATE(access_time) AS date, \n ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY access_time) AS rn\n FROM access_logs\n WHERE access_time >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)\n) AS temp\nGROUP BY user_id, DATE_ADD(date, INTERVAL -rn DAY)\nHAVING COUNT(*) >= 5;\n\n\n这个查询的逻辑如下:\n\n1. 子查询使用ROW_NUMBER()函数对每个用户的访问记录进行编号,并按照访问时间升序排序。\n2. 子查询将访问时间转换为日期,并为每个用户的每条记录添加一个行号。\n3. 主查询按照用户ID和日期减去行号进行分组,并使用COUNT(*)函数进行聚合。\n4. 最后,使用HAVING子句过滤出连续5天有上网记录的用户。\n\n请注意,这个查询可能对于亿级的数据量来说性能较差。如果需要处理大量数据,请考虑使用数据库分区、索引等优化措施。
原文地址: https://www.cveoy.top/t/topic/pDmf 著作权归作者所有。请勿转载和采集!