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

验证计算每个用户活跃日期最大间隔的SQL查询有效性的技术问询

验证计算每个用户活跃日期最大间隔的SQL查询有效性的技术问询

首先得说,你提供的这段SQL解决方案和当前的任务完全不匹配哦,咱们先理清楚问题:

原始需求是从gamers表中计算每个用户活跃日期之间的最大间隔——比如用户1的最大间隔是3天(2019-01-02到2019-01-05),用户2是30天(2019-03-01到2019-03-31),用户3只有一条记录所以返回null。但你给出的SQL里用到了gamers2、total_amount_spent、country这些原始表中根本不存在的对象和字段,逻辑方向也完全偏离了日期间隔计算的需求,是没法得到正确结果的。

那咱们来写符合需求的正确查询方案,核心思路是:

  • 给每个用户的活跃日期按时间排序,匹配出下一条活跃日期
  • 计算相邻日期的间隔天数
  • 对每个用户取间隔天数的最大值,无间隔的用户返回null

具体SQL代码如下:

WITH user_dates AS (
    SELECT
        user_id,
        active_date,
        -- 用窗口函数获取当前用户的下一条活跃日期
        LEAD(active_date) OVER (PARTITION BY user_id ORDER BY active_date) AS next_active_date
    FROM gamers
),
date_gaps AS (
    SELECT
        user_id,
        -- 计算两次活跃的间隔天数
        DATEDIFF(next_active_date, active_date) AS gap_days
    FROM user_dates
    -- 过滤掉没有下一条日期的记录(用户最后一次活跃)
    WHERE next_active_date IS NOT NULL
)
SELECT
    g.user_id,
    -- 左连接确保只有一条记录的用户能返回null
    MAX(gd.gap_days) AS max_gap_days
FROM gamers g
LEFT JOIN date_gaps gd ON g.user_id = gd.user_id
GROUP BY g.user_id
ORDER BY g.user_id;

测试这段查询后,结果会完全符合需求:

  • user_id 1:max_gap_days = 3
  • user_id 2:max_gap_days = 30
  • user_id 3:max_gap_days = null

备注:内容来源于stack exchange,提问作者DNAProgrammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:42:39