SQL问题:修正获取输入Sqft对应最接近值的Adjustment_Factor查询
修正SQL查询以处理距离相等时的向上匹配需求
现有Tab_SqftAdjustment表包含Sqft和Adjustment_Factor列,表中数据如下:
- Sqft=400,Adjustment_Factor=1.41
- Sqft=500,Adjustment_Factor=1.33
- Sqft=600,Adjustment_Factor=1.25
需求是根据输入的Sqft值,获取最接近的舍入值对应的Adjustment_Factor,规则为:
- 输入410→返回1.41(更接近400)
- 输入450→返回1.33(与400、500距离相等时取更大的Sqft)
- 输入550→返回1.25(与500、600距离相等时取更大的Sqft)
原查询的问题在于:当输入值与两个Sqft的距离相等时,会返回表中排序靠前的记录(比如550时返回500对应的1.33),不符合需求。
修正后的查询
SELECT TOP 1 Sqft, Adjustment_Factor FROM Tab_SqftAdjustment ORDER BY ABS(Sqft - @InputSqft), Sqft DESC
逻辑说明
- 第一排序条件
ABS(Sqft - @InputSqft):按输入值与表中Sqft的距离升序排列,优先取距离最近的记录 - 第二排序条件
Sqft DESC:当距离相等时,按Sqft降序排列,确保取更大的Sqft对应的Adjustment_Factor
将@InputSqft替换为实际输入的数值(比如550)即可得到预期结果:
- 输入450时,400和500距离均为50,Sqft降序后500排在前面,返回1.33
- 输入550时,500和600距离均为50,Sqft降序后600排在前面,返回1.25
内容的提问来源于stack exchange,提问作者Lorna Watawat
相关产品推荐
相关产品推荐

