-- 1. SubQuery SELECT nm, v FROM t WHERE v = (SELECT MAX(v) FROM t WHERE v <= :v) ; -- 2. Order By & Rownum = 1 SELECT * FROM (SELECT nm, v FROM t WHERE v <= :v ORDER BY v DESC ) WHERE ROWNUM = 1 ; -- 3. Row_number = 1 SELECT nm, v FROM (SELECT nm, v , ROW_NUMBER() OVER(ORDER BY v DESC) rn FROM t WHERE v <= :v ORDER BY v DESC ) WHERE rn = 1 ; -- 4. MAX, Keep SELECT MAX(nm) KEEP(DENSE_RANK LAST ORDER BY v) nm , MAX(v) FROM t WHERE v <= :v ;