在Plsql中选择第二行

时间:2012-12-04 09:53:31

标签: oracle select plsql top-n

假设我有下表:

 SomeTable(
    id, 
    price
 )

如何从此表中选择第二高价行? 注意:这必须以数据库无关的方式在Pl / SQL中完成。 没有任何循环可以做到这一点吗?

  1. 我知道如何使用像rownum之类的Oracle结构或像limit这样的mysql结构来完成这项工作,所以我不是在寻找那些。

2 个答案:

答案 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))