2

次のようなテーブルがあるとします(私はOracle 10g btwを使用しています)

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

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 に答える