You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite月度客户留存计算问题求解

SQLite月度客户留存计算方案

数据表结构

year_monthcustomer_id
2022-05abc
2022-05asd
2022-05xyz
2022-06abc
2022-06xyz
2022-06qwe
2022-07abc
2022-07asd

留存规则

客户ID同时出现在当前月和上月,即视为留存客户:

  • abc和xyz同时出现在2022-05和2022-06,因此2022-06的留存客户数为2
  • asd在2022-05出现后,2022-06未出现,2022-07再次出现,不计入留存

实现SQL语句

SELECT
    curr.year_month,
    COUNT(DISTINCT curr.customer_id) AS customers_retained
FROM
    your_table_name curr
JOIN
    your_table_name prev ON curr.customer_id = prev.customer_id
    AND strftime('%Y%m', curr.year_month || '-01') = strftime('%Y%m', date(prev.year_month || '-01', '+1 month'))
GROUP BY
    curr.year_month
HAVING
    COUNT(DISTINCT prev.customer_id) > 0;

语句说明

  • 自连接关联:将表自身拆分为当前月(curr)和上月(prev)两个数据集,通过customer_id匹配同一客户
  • 日期逻辑处理:通过date函数将上月的year_month转为日期后加1个月,再用strftime统一格式为YYYYMM,确保与当前月严格匹配
  • 去重计数:使用COUNT(DISTINCT)避免同一客户在当月多次出现导致的重复统计
  • 过滤无效月份:HAVING子句过滤掉没有上月数据的月份(如2022-05)

预期输出

year_monthcustomers_retained
2022-062
2022-071

内容的提问来源于stack exchange,提问作者Marcus Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:25:37