Sql server 查找与给定数字最近的范围
我有一个包含以下数据的表格Sql server 查找与给定数字最近的范围,sql-server,Sql Server,我有一个包含以下数据的表格 id range_min range_max 1 1 10 2 4 7 3 5 10 4 5 5 我希望: input id 6 2 5 4 3 1 知道如何在MSSQL中实现这一点吗?试试这个 select count(id) as id from table where input>=range_min
id range_min range_max
1 1 10
2 4 7
3 5 10
4 5 5
我希望:
input id
6 2
5 4
3 1
知道如何在MSSQL中实现这一点吗?试试这个
select count(id) as id from table where input>=range_min and input<=tange_max
这显示了如何设置预期结果:
CREATE TABLE #temp
(
id INT IDENTITY(1, 1) ,
range_min INT ,
range_max INT
)
INSERT INTO #temp
( range_min, range_max )
VALUES ( 1, 10 ),
( 4, 7 ),
( 5, 10 ),
( 5, 5 )
DECLARE @input INT = 6;
WITH cte
AS ( SELECT id ,
range_min ,
range_max ,
RANK() OVER ( ORDER BY range_max - range_min ) AS tightness
FROM #temp
WHERE @input >= range_min
AND @input <= range_max
)
SELECT id
FROM cte
WHERE cte.tightness = 1
更改@Input变量以查看不同的结果。这仅使用范围的紧密性来找到最佳匹配。如果除此之外你还需要什么,你应该在你的问题中清楚地列出它。那么:
SELECT TOP 1 numbers.input, data.range_min AS id
FROM (
SELECT numbers.input, data.range_min, data.range_max - data.range_min AS span
FROM numbers, data
WHERE numbers.input >= data.range_min AND numbers.input <= data.range_max
)
ORDER BY span
您没有指定输入来自何处。我假设它来自一个表:数字
当输入属于不同的范围时,我选择了最紧的一个,因此按跨度排序,即最大-最小值。为什么5返回4而不是1或3?因为它是精确匹配的。我在找最窄的范围。比如射程是分数的70%,射程内的平均得分是30%什么是分数?30%的平均得分是什么意思?我指的是中位数。所以ID2的中位数是5.5。这占了比赛的30%。而最窄的范围将占到匹配的70%,您能解释一下预期输出的逻辑吗?请编辑您的问题这不会返回预期的结果集。您是否尝试过该语句以查看它是否带来OP的预期结果?没有。当我输入6时,我得到ID=3,OP期望ID=2。@ID Rmin+RMax-@ID=RMax-Rmin:查看我的答案如果我还想按它在范围内的居中程度排序,那么结果将是ID:4,2,1,3
Declare @id int
Select top 1 *
From TableName
Where Rmin<=@id and RMax>=@id
Order by (@id-Rmin) + (RMax-@id)