sql - 选择根据列的最小值获取行
问题描述
我有一个表 WT_RT。
上select
它会给我这个结果
select * from WT_RT;
WT_SEQ W RT_AMT R
---------- - ---------- -
0 0 125 M
1 2 9.3 N
45 2 7.19 Q
100 1 6.38 Q
300 1 5.11 Q
500 2 4.69 Q
1000 2 4.39 Q
在输入 时WT_SEQ=250
,由于 250 介于 100 和 300 之间,我需要选择具有最少 的行RT_AMT
。在这种情况下,因为5.11 < 6.38
,我需要选择WT_SEQ
= 300 的行。
预期结果:
WT_SEQ W RT_AMT R
---------- - ---------- -
300 1 5.11 Q
到目前为止,我已经设法找到封闭的 2 行。
select ........;
WT_SEQ W RT_AMT R
---------- - ---------- -
100 1 6.38 Q
300 1 5.11 Q
RT_AMT
但是我需要实现如何做到的最小值的条件?
解决方案
一种方法是通过距离排序的前 2 个。
然后按 RT_AMT 排序前 1 个。
select WT_SEQ, RT_AMT
from
(
select *
from
(
select *
from WT_RT
cross join (select 250 val from dual) v
order by ABS(WT_SEQ - val)
) q1
where rownum <= 2
order by (case when WT_SEQ = val then 1 else 2 end), RT_AMT asc
) q2
where rownum = 1;
添加 CASE WHEN 以赋予等于该值的 WT_SEQ 优先级。
推荐阅读
- php - 使用两个参数sql在mysql中添加相同的值
- android - 我想从抽屉按钮调用 MainActivity 的一个函数
- autodesk-forge - 将按钮添加到 Forge 查看器
- sql - 使用日期过滤但保留计算
- scala - 将数据保存到序列文件
- r - 如果基于反应值的 Shiny 语句
- javascript - 为 $scope 属性赋值的问题(angularjs)
- c# - 如何使用 DataSet 和 DataAdapter C#/asp.net 删除?
- django - 在 Django 中的 Serializer.is_valid() 中预取 ForeignKey
- google-chrome - Chrome 通知证书不是由第三方安全签名的