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

基于同表数据的SQL计算:求两日期均存在的用户value差值

解决方案:筛选双日期用户并计算Value差值

嘿,我来帮你搞定这个SQL需求!要筛选出在2018-03-20和2018-03-22两个日期都出现的用户,还要计算他们后日期与前日期的value差值,这里有两种实用的实现方式:

方法1:自连接(JOIN)

这种方法逻辑直观,通过将表自身按用户名称关联,精准匹配两个日期的记录来计算差值:

SELECT 
    t1.Name,
    t2.value - t1.value AS value_diff
FROM 
    your_table t1
JOIN 
    your_table t2 ON t1.Name = t2.Name
WHERE 
    t1.date = '2018-03-20'
    AND t2.date = '2018-03-22';

简单说明:

  • 用t1指代用户在2018-03-20的记录,t2指代同一用户在2018-03-22的记录
  • JOIN会自动过滤掉只在单个日期出现的用户
  • 直接通过t2.value - t1.value得到两次value的差值

方法2:条件聚合(CASE WHEN + GROUP BY)

如果后续需要扩展处理更多日期或聚合其他字段,这种方法会更灵活:

SELECT 
    Name,
    MAX(CASE WHEN date = '2018-03-22' THEN value END) - 
    MAX(CASE WHEN date = '2018-03-20' THEN value END) AS value_diff
FROM 
    your_table
WHERE 
    date IN ('2018-03-20', '2018-03-22')
GROUP BY 
    Name
HAVING 
    COUNT(DISTINCT date) = 2; -- 确保用户在两个日期都有有效记录

简单说明:

  • 先筛选出目标两个日期的所有数据
  • 按用户Name分组后,用CASE WHEN分别提取两个日期的value值
  • HAVING子句会过滤掉仅在单个日期出现的用户
  • 最后计算两个日期value的差值

验证结果

两种方法执行后都会得到你需要的结果:

Mr.A,10
Mr.B,11
Mr.C,13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:14