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)