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

SQL分区求和问题求助:按分组计算符合指定条件的Value总和

解决方案

可以通过子查询获取每个Group_1的第一条'E'日期,再关联原表筛选符合条件的记录求和,具体SQL如下:

SELECT
    t.Group_1,
    'D' AS Group_2,
    SUM(t.Value) AS Sum
FROM your_table t
LEFT JOIN (
    -- 获取每个Group_1中最早的E记录日期
    SELECT Group_1, MIN(Date) AS first_e_date
    FROM your_table
    WHERE Group_2 = 'E'
    GROUP BY Group_1
) e ON t.Group_1 = e.Group_1
WHERE
    t.Group_2 = 'D'
    -- 筛选条件:要么没有E记录,要么D的日期早于第一条E的日期
    AND (e.first_e_date IS NULL OR t.Date < e.first_e_date)
GROUP BY t.Group_1
ORDER BY t.Group_1;

逻辑说明

  1. 子查询e:针对每个Group_1,找出Group_2='E'的最早日期,没有'E'的分组不会出现在这个子查询中。
  2. 左连接:将原表与子查询左连接,保证没有'E'的分组(如示例中的Group_1=C)仍能被保留,此时first_e_date为NULL。
  3. 筛选求和:只保留Group_2='D'的记录,并且满足「无E记录」或「日期早于第一条E的日期」的条件,最后按Group_1分组求和。

注意事项

如果你的Date字段是字符串类型,需要先转换为日期类型再进行比较,避免字符串排序导致的错误。例如:

  • MySQL:STR_TO_DATE(t.Date, '%m/%d/%Y') < STR_TO_DATE(e.first_e_date, '%m/%d/%Y')
  • PostgreSQL:TO_DATE(t.Date, 'MM/DD/YYYY') < TO_DATE(e.first_e_date, 'MM/DD/YYYY')
  • SQL Server:CAST(t.Date AS DATE) < CAST(e.first_e_date AS DATE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:35:28