2013-03-25 2 views
2

Скажем, у меня есть таблица вроде следующего (я на Oracle 10g BTW)SQL найти ближайший номер

NAME VALUE 
------ ------ 
BOB  1 
BOB  2 
BOB  4 
SUZY 1 
SUZY 2 
SUZY 3 

Как я могу выбрать все строки, где value ближе всего, но не больше, чем, данная номер. Например, если я хочу, чтобы найти все строки, где значение находится ближе всего к 3 я хотел бы получить:

NAME VALUE 
------ ------ 
BOB  2 
SUZY 3 

Это кажется, что это должно быть просто ... но я не имею никакой удачи.

Спасибо!

ответ

4
SELECT name, max(value) 
FROM tbl 
WHERE value <= 3 
GROUP BY name 
+0

спасибо !! У меня была своя группа, потому что я не знаю, как долго>: | –

1

основе hagensofts Ответ:

SELECT name, max(value) 
FROM tbl 
WHERE value <= 3 AND ROWNUM <=2 
GROUP BY name 

С ROWNUM вы можете ограничить выходные строки, так что если вы хотите, 2 строки, то вам может ограничить рон.

0
WITH v AS (
    SELECT 'BOB' NAME, 1 value FROM dual 
    UNION ALL 
    SELECT 'BOB', 2 FROM dual 
    UNION ALL 
    SELECT 'BOB', 4 FROM dual 
    UNION ALL 
    SELECT 'SUZY', 1 FROM dual 
    UNION ALL 
    SELECT 'SUZY', 2 FROM dual 
    UNION ALL 
    SELECT 'SUZY', 3 FROM dual 
) 
SELECT * 
    FROM v 
WHERE (name, value) IN (SELECT name, MAX(value) 
          FROM v 
         WHERE value <= :num 
         GROUP BY name) 
; 
Смежные вопросы