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 图片生成器

相关推荐
ClouGence15 分钟前
数据库变更审批困局,被这个开源工具解决了
数据库·开源
TDengine (老段)43 分钟前
TDengine IDMP 十大实用功能(9)
大数据·数据库·人工智能·物联网·时序数据库·tdengine·idmp
李帅5151 小时前
用 CPU 做发票识别:从 OCR 文本行到结构化明细表的 4 个硬骨头
python
starrocks_stella2 小时前
EMR Serverless StarRocks Object Table:用 SQL 连接 OSS 文件与多模态 AI
数据库
这个DBA有点耶2 小时前
以为自增ID只是有空洞?聊聊双主架构下无声的“数据覆盖”
数据库·mysql·dba
happylifetree2 小时前
Python79:核心语法-面向对象基础-实例方法
python
贝壳6903 小时前
bool-hybrid-array 9.13.6 偷偷加了个"按键自动升序"的字典,我翻出来测了下
python
钱栈up3 小时前
内网全断,怎么核实高炉和烧结系统的数据库对接信息
数据库
weavecodes3 小时前
双层缓存与权限实时生效:织码在线教育系统的 Caffeine + Redis 设计
数据库
艺杯羹3 小时前
MCP本地服务集成避坑:从Stdio管道僵死到双向JSON-RPC稳健通信
人工智能·python·ai·系统架构·大语言模型·ai编程·mcp