2013-03-25 95 views
2

说我有一个表像下面的(我在BTW的Oracle 10g)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

谢谢!我错了我的团队,因为我不知道现在多久>: – 2013-03-25 07:17:40

1

此作品(SQLFiddle demo):

SELECT name, max(value) 
FROM mytable 
WHERE value <= 3 
GROUP BY name 
1

基于hagensofts回答:

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

随着ROWNUM可以限制输出行,所以如果你想2排,那么你可以限制rownum。

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) 
;