数据表
+-------------------------------------------+
| id start_range end_range descr |
+-------------------------------------------+
| 1 500 550 data1 |
| 2 500 500 data2 |
| 3 510 510 data3 |
+-------------------------------------------+
所以我需要帮助来创建一个输入范围值的查询,并检查开始和结束范围,如果它在范围内则应该相应地返回行。
对于前。
input: 500 output: data2
input: 510 output: data3
input: 502 output: data1
input: 550 output: data1
input: 551 output: null
答案 0 :(得分:0)
你可以
所以你必须从你的比赛中选择你认为“最好”的记录。一种方法是使用ROW_NUMBER
对匹配进行排名:
select descr
from
(
select descr,
row_number() over (order by end_range - start_range) as rn
from mytable
where @value between start_range and end_range
)
where rn = 1;
这为您提供了“最佳”描述的行,或者在没有匹配时没有行。
另一种选择是Oracle的KEEP DENSE_RANK
:
select max(descr) keep (dense_rank first order by end_range - start_range)
from mytable
where @value between start_range and end_range;
这为您提供了“最佳”描述,或者在没有匹配时为NULL。