You need to enable JavaScript to run this app. MySQL查询:按最大有效日期获取各unit_code的唯一对应数据行
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:按最大有效日期获取各unit_code的唯一对应数据行

MySQL 按unit_code取最新有效生效记录的查询实现

常见结果偏差的核心原因

大部分查询得不到预期结果,基本是踩到两个典型问题:

  • 计算最大生效时间时,没有提前过滤effective_from > 当前日期的未来记录,导致把未生效的未来数据当成了最大值
  • 关联原表取金额时,只按unit_code关联,没有匹配对应的生效时间值,错取到同unit_code下其他历史时间的金额

实现方案1:MySQL 8.0及以上版本(窗口函数方案,性能更优)

  • 逻辑说明:对过滤后的有效记录,按unit_code分组、生效时间降序排序,直接取每组的第一条记录即可
  • 注意:执行时请将代码里的your_business_table替换为实际业务表名
  • 参考SQL代码:
WITH filtered_valid_data AS (
    SELECT
        unit_code,
        amount,
        effective_from,
        ROW_NUMBER() OVER (
            PARTITION BY unit_code
            ORDER BY effective_from DESC
        ) AS row_rank
    FROM your_business_table
    WHERE effective_from <= CURDATE()
)
SELECT unit_code, amount, effective_from
FROM filtered_valid_data
WHERE row_rank = 1;
  • 适配提示:如果同一unit_code下存在多条完全相同的最大生效时间记录,且需要全部返回时,可将ROW_NUMBER()替换为RANK()

实现方案2:MySQL 5.x低版本兼容方案(无窗口函数)

  • 逻辑说明:先聚合算出每个unit_code符合日期要求的最大生效时间,再回连原表匹配对应记录
  • 注意:执行时请将代码里的your_business_table替换为实际业务表名
  • 参考SQL代码:
SELECT
    main.unit_code,
    main.amount,
    main.effective_from
FROM your_business_table main
INNER JOIN (
    SELECT
        unit_code,
        MAX(effective_from) AS latest_valid_date
    FROM your_business_table
    WHERE effective_from <= CURDATE()
    GROUP BY unit_code
) latest
    ON main.unit_code = latest.unit_code
    AND main.effective_from = latest.latest_valid_date;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 23:36:04