首页 > 解决方案 > 选择根据列的最小值获取行

问题描述

我有一个表 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 但是我需要实现如何做到的最小值的条件?

标签: sqloracleselect

解决方案


一种方法是通过距离排序的前 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 优先级。


推荐阅读