假设我有下表:
SomeTable(
id,
price
)
如何从此表中选择第二高价行? 注意:这必须以数据库无关的方式在Pl / SQL中完成。 没有任何循环可以做到这一点吗?
rownum
之类的Oracle结构或像limit
这样的mysql结构来完成这项工作,所以我不是在寻找那些。答案 0 :(得分:1)
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
答案 1 :(得分:1)
这不简单吗?天知道为什么我以前没想过它!
从tnum中选择max(price) 价格<> (从tnum中选择max(price))