如何用SQL查询用户金额首次达到100万的日期?
解决方案
针对你要查询每个用户首次金额达到100万日期的需求,这里提供两种实用的SQL方案,适配不同场景:
方法1:直接筛选达标记录取最早日期(简单高效)
如果你的表中每个用户每天至少有一条记录,直接筛选出所有金额≥100万的记录,再按用户分组取最早日期即可,用ROW_NUMBER()窗口函数实现:
SELECT user_id, date AS first_reach_date FROM ( SELECT user_id, date, amount, -- 按用户分组,日期正序给达标记录编号 ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS rn FROM your_table WHERE amount >= 1000000 ) t WHERE rn = 1;
方法2:用LAG函数判断首次突破(更严谨)
如果用户的记录不是连续每天都有,或者需要明确“首次达标前从未达到过100万”,可以用LAG函数获取上一条记录的金额,筛选出首次突破的日期:
SELECT user_id, date AS first_reach_date FROM ( SELECT user_id, date, amount, -- 获取当前用户上一条记录的金额 LAG(amount) OVER (PARTITION BY user_id ORDER BY date) AS prev_amount FROM your_table ) t -- 筛选条件:当前金额达标,且上一条记录要么不存在(用户第一条记录),要么未达标 WHERE amount >= 1000000 AND (prev_amount IS NULL OR prev_amount < 1000000);
注意事项
- 替换SQL中的
your_table为实际表名 - 确认金额单位是否为100万(即数值1000000),若单位不同需调整对应数值
- 如果同一用户同一天有多条记录,可在
ORDER BY后追加额外条件(比如ORDER BY date, amount DESC),确保取到当天符合需求的记录
内容的提问来源于stack exchange,提问作者DilTeam
相关产品推荐
相关产品推荐

