SQL统计活跃用户怎么做_时间窗口分析SQL讲解【指导】

发布时间 - 2025-12-25 00:00:00    点击率:
统计活跃用户核心是定义“活跃”和“时间窗口”,再用SQL聚合计算;关键在理清业务逻辑,如DAU、WAU、MAU及留存率的差异化实现与口径对齐。

统计活跃用户核心是定义“活跃”和“时间窗口”,再用SQL聚合计算。关键不在复杂语法,而在理清业务逻辑:比如“近7天登录过的用户”和“连续3天登录的用户”,写法完全不同。

明确活跃标准和时间范围

先和产品、运营对齐口径,避免技术实现和业务需求脱节。常见定义包括:

  • 单日活跃(DAU):某一天有行为(如登录、下单、点击)的去重用户数
  • 周活跃(WAU):最近7天内至少活跃1天的用户数
  • 月活跃(MAU):最近30天内至少活跃1天的用户数
  • 存用户:在某日新增后,在后续第N天再次活跃的用户(需分层分析)

基础活跃用户统计(以DAU为例)

假设日志表 user_behavior 含字段:user_idevent_time(datetime)、event_type(如'login'、'click'):

SELECT COUNT(DISTINCT user_id) AS dau FROM user_behavior WHERE DATE(event_time) = '2025-06-15' AND event_type = 'login';

注意点:

  • COUNT(DISTINCT user_id) 防止同一用户多次行为重复计数
  • 日期过滤建议用 DATE(event_time)event_time >= '2025-06-15' AND event_time ,后者能走索引
  • 务必加行为类型条件,避免把埋点错误或测试数据计入

滚动窗口活跃(如WAU/MAU)

统计“截至今天,过去7天活跃过的用户总数”,用日期范围动态筛选:

SELECT COUNT(DISTINCT user_id) AS wau FROM user_behavior WHERE event_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY) AND event_time

说明:

  • DATE_SUB(CURDATE(), INTERVAL 6 DAY) 表示7天窗口的起始日(含),例如今天6月15日 → 起始为6月9日
  • 结束条件用 确保包含今日0点到23:59:59
  • 不同数据库函数略有差异:PostgreSQL用 CURRENT_DATE - INTERVAL '6 days',ClickHouse用 today() - 6

留存分析(次日/7日留存)

需要两步:先找出某日新增用户,再查他们在后续日期是否回归。可用自连接或窗口函数:

WITH first_login AS ( SELECT user_id, MIN(DATE(event_time)) AS first_date FROM user_behavior WHERE event_type = 'login' GROUP BY user_id ), retention AS ( SELECT f.first_date, COUNT(DISTINCT b.user_id) AS retained_cnt FROM first_login f LEFT JOIN user_behavior b ON f.user_id = b.user_id AND DATE(b.event_time) = DATE_ADD(f.first_date, INTERVAL 1 DAY) AND b.event_type = 'login' GROUP BY f.first_date ) SELECT first_date, COALESCE(retained_cnt, 0) / COUNT(*) AS retention_rate FROM first_login f LEFT JOIN retention r ON f.first_date = r.first_date GROUP BY first_date;

要点:

  • MIN(DATE(event_time)) 定义“首次活跃日”,作为留存基准日
  • LEFT JOIN + 条件匹配目标日(如次日),保留无回归记录的用户(计为0)
  • 分母是当日新增用户数,分子是次日仍活跃的用户数,比值即留存率


# ai  # sql  # count  # select  # date  # postgresql  # 数据库  # clickhouse  # 次日  # 再用  # 首次  # 而在  # 为例  # 两步  # 下单  # 点到  # 差异化  # 能走 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何在万网开始建站?分步指南解析  如何实现建站之星域名转发设置?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  移动端脚本框架Hammer.js  如何自定义建站之星模板颜色并下载新样式?  如何用y主机助手快速搭建网站?  Python文件操作最佳实践_稳定性说明【指导】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Swift中switch语句区间和元组模式匹配  lovemo网页版地址 lovemo官网手机登录  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  音乐网站服务器如何优化API响应速度?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  如何快速选择适合个人网站的云服务器配置?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Laravel如何使用Eloquent进行子查询  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何快速生成可下载的建站源码工具?  实例解析angularjs的filter过滤器  如何用AWS免费套餐快速搭建高效网站?  EditPlus中的正则表达式实战(6)  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  潮流网站制作头像软件下载,适合母子的网名有哪些?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何用PHP工具快速搭建高效网站?  Firefox Developer Edition开发者版本入口  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何在腾讯云服务器快速搭建个人网站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  如何快速辨别茅台真假?关键步骤解析  高防服务器如何保障网站安全无虞?  浅述节点的创建及常见功能的实现  制作旅游网站html,怎样注册旅游网站?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何快速生成橙子建站落地页链接?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何快速搭建自助建站会员专属系统?  如何用景安虚拟主机手机版绑定域名建站?  中山网站推广排名,中山信息港登录入口?