我有一张包含以下数据的表
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中执行此操作吗?
答案 0 :(得分:1)
怎么样:
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
您没有指定input
的来源。我假设它来自一个表:numbers
。
当input
属于不同范围时,我选择了最紧密的范围(因此在span
上排序,即max - min)。
答案 1 :(得分:0)
这显示了如何设置预期结果:
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变量以查看不同的结果。这只使用&#34;紧密度&#34;找到最佳匹配的范围。如果你需要的东西除外,你应该在你的问题中清楚地列出。
答案 2 :(得分:0)
Declare @id int
Select top 1 *
From TableName
Where Rmin<=@id and RMax>=@id
Order by (@id-Rmin) + (RMax-@id)
答案 3 :(得分:-2)
试试这个
select count(id) as id from table where input>=range_min and input<=tange_max