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

SQL优先取MAX日期再取最大seq获取商品单条最新记录的查询问题

问题根因

现有查询的逻辑是分别取单个商品的全局最大日期、全局最大seq,要求记录同时满足两个条件,当两个最大值不在同一条记录上时,就会出现无结果的问题。比如你举的SKU 5356262的例子:最大日期是7/24/2021对应seq为1,而全局最大seq为3对应日期是6/2/2021,没有记录能同时匹配两个条件,自然返回空。

解决方案

推荐使用窗口函数ROW_NUMBER()实现按优先级排序取Top1的需求,逻辑更清晰,也避免多子查询匹配的问题,修正后的SQL如下:

SELECT item, exdt, seq, [M], [L], [OH]
FROM (
    -- 按商品分组,优先按日期降序、同日期按seq降序排序
    SELECT 
        item, 
        cpp, 
        exdt, 
        seq, 
        tvt_1 + tft_1 AS ttot_1,
        ROW_NUMBER() OVER (
            PARTITION BY LTRIM(item) 
            ORDER BY exdt DESC, seq DESC
        ) AS rn
    FROM dbo.sample123
) AS p
-- 仅取每个商品排序后的第一条记录,即最大日期下最大seq的记录
WHERE rn = 1
PIVOT (
    SUM(ttot_1) 
    FOR cpp IN ([M], [L], [OH])
) AS pvtc
说明
  • 窗口函数的PARTITION BY LTRIM(item)和你原有逻辑的商品匹配规则完全一致
  • ORDER BY exdt DESC, seq DESC严格按照你要求的优先级排序:先取最大日期,同日期下再取最大seq
  • 同时修正了你原有SQL的几个语法问题:SELECT *后缺失的FROM关键字、seq字段名拼写错误、PIVOT子句中多余的闭合方括号
  • 如果存在同一商品同一最大日期下有多个相同最大seq的记录,需要返回全部符合条件的行,把ROW_NUMBER()替换为RANK()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:57:03