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

MySQL按user_id计算用户最后两次操作间隔天数,单操作算至今日

实现思路
  • 第一步:给每个用户的操作记录按date倒序编号,同时统计每个用户的总操作次数
  • 第二步:过滤出每个用户最多前2条操作记录(足够计算所需差值)
  • 第三步:按user_id分组判断:如果用户总操作数≥2,取最后两条记录的日期间隔;如果只有1条,取操作日期到今日的天数
适用MySQL 8.0+的查询语句

以下示例表名为user_action,请替换为你的实际表名:

WITH ranked_actions AS (
    SELECT 
        user_id,
        `date`,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY `date` DESC) AS rn,
        COUNT(*) OVER (PARTITION BY user_id) AS action_cnt
    FROM user_action
)
SELECT 
    user_id,
    CASE 
        WHEN action_cnt >= 2 THEN DATEDIFF(MAX(`date`), MIN(`date`))
        ELSE DATEDIFF(CURDATE(), `date`)
    END AS num_days
FROM ranked_actions
WHERE rn <= 2
GROUP BY user_id, action_cnt;
兼容MySQL 5.x的查询语句

如果使用不支持窗口函数的低版本MySQL,可以用以下方案:

SELECT 
    a.user_id,
    CASE 
        WHEN COUNT(*) >= 2 THEN DATEDIFF(MAX(a.`date`), SUBSTRING_INDEX(GROUP_CONCAT(a.`date` ORDER BY a.`date` DESC), ',', 2))
        ELSE DATEDIFF(CURDATE(), MAX(a.`date`))
    END AS num_days
FROM user_action a
GROUP BY a.user_id;

注:低版本方案依赖GROUP_CONCAT函数,单用户操作量极大的场景需要提前调整group_concat_max_len参数避免内容截断,常规业务场景无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03