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

如何用单CASE语句结合RANK/DENSE_RANK仅对指定日期范围计算排名?

实现指定日期范围的条件排名需求

你需要仅对日期落在'2023-01-01'至'2023-06-01 00:00:00'区间内的行计算排名,其余行返回空值或0,且用单个CASE语句完成。原代码的问题在于,RANK()函数会对所有行生成排名,仅在排序逻辑里过滤了日期,不符合你要的效果。

方案1:不符合条件时返回NULL

SELECT *
    , CASE 
        WHEN date BETWEEN '2023-01-01' AND '2023-06-01 00:00:00'
        THEN RANK() OVER (PARTITION BY id ORDER BY date)
        ELSE NULL
      END AS Rank_Needed
FROM Table1;

方案2:不符合条件时返回0

SELECT *
    , CASE 
        WHEN date BETWEEN '2023-01-01' AND '2023-06-01 00:00:00'
        THEN RANK() OVER (PARTITION BY id ORDER BY date)
        ELSE 0
      END AS Rank_Needed
FROM Table1;

如果需要使用DENSE_RANK()替代RANK(),直接替换函数名即可,逻辑完全一致。

这里的CASE语句直接判断当前行的日期是否在目标区间内,仅对符合条件的行执行排名计算,不符合的行直接返回指定的空值或0,完全满足你的需求,且是单个CASE语句实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:37:07