2

假设我有一个如下表(我在 Oracle 10g 顺便说一句)

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

如何选择value最接近但不大于给定数字的所有行。例如,如果我想找到 value 最接近 3 的所有行,我会得到:

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

这似乎应该很简单......但我没有运气。

谢谢!

4

4 回答 4

4
SELECT name, max(value)
FROM tbl
WHERE value <= 3
GROUP BY name
于 2013-03-25T07:03:16.530 回答
1

这有效(SQLFiddle 演示):

SELECT name, max(value)
FROM mytable
WHERE value <= 3
GROUP BY name
于 2013-03-25T07:06:22.413 回答
1

基于 hagensofts 的回答:

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

使用 ROWNUM 您可以限制输出行,因此如果您想要 2 行,那么您可以限制 rownum。

于 2013-03-25T07:07:10.700 回答
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)
;
于 2013-03-25T07:07:10.953 回答