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

使用SQL计算指定日期间日维度未登录用户数的问题

计算Num_users_no_log_in字段的SQL方案

核心逻辑

Num_users_no_log_in的计算逻辑为:全量去重用户总数,减去在(last_log_in_date, present_date]时间区间内有登录记录的去重用户数量,同时需满足时间区间不超过回溯90天的限制。

完整实现代码

-- 先统计全量去重用户总数
WITH all_users AS (
    SELECT COUNT(DISTINCT User_Id) AS total_user_cnt
    FROM users_table
),
-- 生成去重登录日期列表
dts AS (
    SELECT DISTINCT log_in_dates
    FROM users_table
),
-- 生成符合90天回溯要求的日期对(基准日+最后登录区间起始日)
date_pairs AS (
    SELECT 
        x.log_in_dates AS present_date,
        DATEDIFF(DAY, y.log_in_dates, x.log_in_dates) AS days_difference,
        y.log_in_dates AS last_log_in_date
    FROM dts x
    CROSS JOIN dts y
    WHERE x.log_in_dates >= y.log_in_dates
      AND DATEDIFF(DAY, y.log_in_dates, x.log_in_dates) <= 90
)
-- 关联登录表计算区间未登录用户数
SELECT 
    dp.present_date,
    dp.days_difference,
    dp.last_log_in_date,
    au.total_user_cnt - COUNT(DISTINCT ut.User_Id) AS Num_users_no_log_in
FROM date_pairs dp
CROSS JOIN all_users au
LEFT JOIN users_table ut
    ON ut.log_in_dates > dp.last_log_in_date
    AND ut.log_in_dates <= dp.present_date
GROUP BY dp.present_date, dp.days_difference, dp.last_log_in_date, au.total_user_cnt
ORDER BY dp.present_date, dp.days_difference DESC

样例校验

以你提供的样例数据验证:全量用户共6人,基准日为2021-09-02、last_log_in_date为2021-09-01时,区间内有登录记录的用户为2、3共2人,6-2=3,和样例输出结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:24:03