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

SQL Server:如何在WHERE子句用CASE按日期获取商品昨日/前日最高价

解决SQL Server中商品昨日/前日最高价查询及WHERE子句使用CASE筛选的问题

一、实现核心需求:优先取昨日最高价,无数据则取前日

你的原查询只限定了昨日的日期范围,所以没法覆盖“昨日无数据则取前日”的场景。我们可以先把昨日和前日的数据都纳入查询范围,给日期设置优先级(昨日优先级更高),再通过窗口函数筛选出每个商品的目标最高价。

修改后的SQL语句如下:

SELECT MARKETNAME, COMMODITY, MAXPRICE
FROM (
    SELECT 
        MARKETNAME, 
        COMMODITY, 
        MAXPRICE,
        -- 给日期设置优先级:昨日标记为1,前日标记为2,数字越小优先级越高
        ROW_NUMBER() OVER (
            PARTITION BY COMMODITY 
            ORDER BY 
                CASE WHEN DATE = DATEADD(day, -1, CAST(GETDATE() AS DATE)) THEN 1 ELSE 2 END ASC,
                MAXPRICE DESC
        ) AS rn
    FROM MARKETS
    -- 筛选昨日或前日的日期数据(去掉时间部分只保留纯日期)
    WHERE DATE IN (
        DATEADD(day, -1, CAST(GETDATE() AS DATE)),
        DATEADD(day, -2, CAST(GETDATE() AS DATE))
    )
) X
WHERE rn = 1;

逻辑拆解:

  1. 日期范围筛选:用CAST(GETDATE() AS DATE)去掉当前时间的时分秒部分,确保只匹配纯日期;同时纳入昨日和前日的日期数据。
  2. 优先级排序:在窗口函数的ORDER BY中,通过CASE给昨日数据赋予更高优先级(1),前日为次优先级(2);如果同一日期有多个价格记录,再按MAXPRICE DESC取最高价。
  3. 目标记录筛选:通过WHERE rn = 1,每个商品只会留下优先级最高、价格最高的那一条记录。

二、在WHERE子句中使用CASE语句筛选日期

如果需要根据不同业务条件动态切换筛选的日期,就可以在WHERE子句中结合CASE语句实现。举两个常见场景的例子:

场景1:周一特殊处理(取上周五、周四的数据)

SELECT MARKETNAME, COMMODITY, MAXPRICE
FROM MARKETS
WHERE DATE IN (
    -- 今日是周一的话,取上周五;否则取昨日
    CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 2 THEN DATEADD(day, -3, CAST(GETDATE() AS DATE)) ELSE DATEADD(day, -1, CAST(GETDATE() AS DATE)) END,
    -- 今日是周一的话,取上周四;否则取前日
    CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 2 THEN DATEADD(day, -4, CAST(GETDATE() AS DATE)) ELSE DATEADD(day, -2, CAST(GETDATE() AS DATE)) END
);

场景2:根据变量动态选择日期

DECLARE @UseYesterday BIT = 1; -- 1=取昨日,0=取前日

SELECT MARKETNAME, COMMODITY, MAXPRICE
FROM MARKETS
WHERE DATE = CASE
    WHEN @UseYesterday = 1 THEN DATEADD(day, -1, CAST(GETDATE() AS DATE))
    ELSE DATEADD(day, -2, CAST(GETDATE() AS DATE))
END;

注意事项:

  • CASE语句在WHERE中返回的结果类型必须统一,比如这里都返回日期类型,避免类型不匹配报错。
  • 如果需要匹配多个日期,结合IN使用时,每个CASE分支都要返回对应的日期值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:36:16