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

如何按Code分组获取非未来最大EffectiveDate对应的Quantity

解决按Code分组获取最大非未来日期对应Quantity的问题

我懂你的痛点——之前用常规的GROUP BY + MAX(EffectiveDate)方案没过滤掉未来日期,导致结果不符合预期。咱们需要先排除未来日期,再找每组最新的有效记录,下面给你两种实用的SQL方案:

方案1:使用窗口函数(推荐,逻辑更清晰)

窗口函数可以直接给每组数据排序,轻松定位到每组最新的非未来日期记录:

WITH filtered_records AS (
    SELECT 
        Code,
        Quantity,
        EffectiveDate,
        -- 按Code分组,日期倒序排列,最新的记录排第1
        ROW_NUMBER() OVER (PARTITION BY Code ORDER BY EffectiveDate DESC) AS row_rank
    FROM your_table_name
    -- 关键:过滤掉未来日期
    WHERE EffectiveDate <= CURRENT_DATE
)
SELECT Code, Quantity, EffectiveDate
FROM filtered_records
WHERE row_rank = 1;

说明:

  • 先通过WHERE子句筛掉所有晚于当前日期的记录
  • 用ROW_NUMBER()给每个Code组内的记录按日期从新到旧排序
  • 最后取每组排名第1的记录,就是你要的结果

方案2:子查询关联(兼容老版本数据库)

如果你的数据库不支持CTE或窗口函数,可以用子查询先找出每组最大的非未来日期,再关联原表获取对应Quantity:

SELECT t1.Code, t1.Quantity, t1.EffectiveDate
FROM your_table_name t1
INNER JOIN (
    -- 先按Code分组,找出每组最大的非未来日期
    SELECT 
        Code,
        MAX(EffectiveDate) AS latest_valid_date
    FROM your_table_name
    WHERE EffectiveDate <= CURRENT_DATE
    GROUP BY Code
) t2 
ON t1.Code = t2.Code AND t1.EffectiveDate = t2.latest_valid_date;

注意事项:

不同数据库的当前日期函数略有差异:

  • MySQL/PostgreSQL:用CURRENT_DATE
  • SQL Server:用GETDATE()或CURRENT_TIMESTAMP
  • Oracle:用SYSDATE

用你的示例数据测试的话,两种方案都会返回你期望的结果——因为示例里没有未来日期,所以直接取每组最大日期对应的Quantity就行。如果有未来日期的记录,它们会被提前过滤掉,不会影响最终结果。

内容的提问来源于stack exchange,提问作者Abdullah Al Mamun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:51