SQL如何统计每日新增用户数_窗口函数与日期维度的结合

首次登录用户是每个user_id在全量日志中event_time最早的记录,需用ROW_NUMBER()按user_id分组、event_time排序取rn=1,不可用MIN聚合或GROUP BY日期直接统计。怎么用 ROW_NUMBER() 识别"首次登录"用户新增用户的本质是:每个用户在全量日志中时间最早的那条记录。不能只靠 MIN(event_time) 聚合后硬算,否则会漏掉同天多个新用户、或把老用户误判为新用户。正确做法是给每个 user_id 按时间排序,取序号为 1 的行:SELECT user_id, DATE(event_time) AS dtFROM ( SELECT user_id, event_time, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_time) AS rn FROM user_event_log) tWHERE rn = 1;必须用 ORDER BY event_time,不是 created_at 或其他字段------只要不是真实行为发生时间,就可能错判首登PARTITION BY user_id 是核心,漏掉就会变成全局排序,完全失效如果表里有脏数据(比如 event_time 为空或为 0),ROW_NUMBER() 会把它们排在最前,得提前 WHERE event_time > '2000-01-01'为什么不能直接 GROUP BY DATE(event_time) 算每日去重因为"每日新增"不是"当天登录的用户数",而是"当天首次出现的用户数"。直接按日期分组再 COUNT(DISTINCT user_id),会把所有当天活跃用户都算进来,包括上周就注册的老用户。常见错误写法: Fotor AI Image Generator Fotor 平台的 AI 图片生成器

相关推荐
AI开发发烧友2 分钟前
LangGraph多Agent协作实战:以物流售前场景为例的5 Agent工作流设计
python
熊文豪5 分钟前
【金仓数据库征文】不装中间件的 MySQL→金仓在线迁移,mysql_fdw 全流程,和一个差点漏掉的 emoji
数据库·mysql·中间件·电科金仓
码云骑士6 分钟前
70-多Agent协作-CrewAI-AutoGen-角色分工与信息传递协议
python
一个儒雅随和的男子34 分钟前
多租户方案的选型
数据库·oracle
Hachi被抢先注册了37 分钟前
Skills总结
python
用户03321266636743 分钟前
使用 Python 在 PowerPoint 中创建折线图和条形图
python
benchmark_cc1 小时前
如何用 Python 进行多周期 K 线合成与时区对齐?基于 QuantDash 与 Pandas 的量化数据清洗实战(附 GitHub 源码)
开发语言·python·github·盯盘·pandas·quantdash·量化数据
不如语冰1 小时前
AI大模型入门-参数的传递
数据结构·人工智能·pytorch·python
用户6760840656171 小时前
GraphBLAS_01_图的稀疏表示
python
listening7771 小时前
HarmonyOS 6.1 跨设备数据库实战:分布式账本的落地与一致性校验
数据库·harmonyos·分布式账本