次の表があるとしましょう。
SomeTable(
id,
price
)
この表から2番目に高い価格の行を選択するにはどうすればよいですか?注:これは、データベースに依存しない方法で、Pl/SQLで実行する必要があります。ループなしでこれを行うことは可能ですか?
- 私はこれがのようなOracleコンストラクト
rownum
またはのようなmysqlコンストラクトを使用してどのように行われるかを知っているlimit
ので、それらを探していません。
CREATE TABLE mytable (id NUMBER PRIMARY KEY, price NUMBER NOT NULL);
INSERT INTO mytable VALUES (1, 10);
INSERT INTO mytable VALUES (2, 20);
INSERT INTO mytable VALUES (3, 20);
INSERT INTO mytable VALUES (4, 30);
SELECT id, price
FROM (
SELECT id, price, RANK() OVER (ORDER BY price DESC) AS r
FROM mytable
)
WHERE r=2;
ID PRICE
--- -----
2 20
3 20
これは簡単ではありませんか?神は私が以前にそれについて考えなかった理由を知っています!
select max(price)from tnum where price <>(select max(price)from tnum)