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

SQL查询:当值超出范围时默认返回表中最后一行数据的实现

解决方案

可以通过两种简洁的方式实现需求,同时注意FROM、TO、MAX是SQL关键字,必须用方括号[]转义避免语法错误:

方法一:UNION ALL 结合存在性判断

先查询匹配范围的行,若没有匹配结果,则返回表中ID最大的行(即目标最后一行):

DECLARE @VAL DECIMAL(6,2);
SET @VAL = 695.43;

SELECT ID, [FROM], [TO], [MAX]
FROM [MyTable].[dbo].[MagicPlan]
WHERE @VAL BETWEEN [FROM] AND [TO]

UNION ALL

SELECT ID, [FROM], [TO], [MAX]
FROM [MyTable].[dbo].[MagicPlan]
WHERE NOT EXISTS (
    SELECT 1 
    FROM [MyTable].[dbo].[MagicPlan]
    WHERE @VAL BETWEEN [FROM] AND [TO]
)
ORDER BY ID DESC
OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;

方法二:TOP 1 结合排序优先级

通过CASE语句给匹配行更高的排序优先级,无匹配时按ID倒序取第一行,实现逻辑更紧凑:

DECLARE @VAL DECIMAL(6,2);
SET @VAL = 695.43;

SELECT TOP 1 ID, [FROM], [TO], [MAX]
FROM [MyTable].[dbo].[MagicPlan]
ORDER BY 
    CASE WHEN @VAL BETWEEN [FROM] AND [TO] THEN 1 ELSE 2 END,
    ID DESC;

补充说明

如果业务中“最后一行”的定义是TO字段值最大的行,只需将排序条件中的ID DESC替换为[TO] DESC即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:55:21