2014-02-12 26 views
0

我必須獲取蟾蜍的表中第一行和最後一行。 我用下面的查詢從蟾蜍的表中獲取拉斯特羅

select * from grade_master where rownum=(select max(rownum) from grade_master) 
select * from grade_master where rownum=1 

第二查詢工作來獲取第一行。但第一個不行。任何人都請幫助我。

在此先感謝

+0

你是如何定義一行作爲第一個還是最後一個?行可以是第一個或基於某些升序,降序或散列的順序。 – San

回答

0

在oracle中,數據不會被排序,直到您指定您的sql語句中的順序。

所以,當你這樣做:

select * from grade_master 

甲骨文將給行,無論如何也想希望。

OTOH如果你

select * from grade_master order by id desc 

那麼甲骨文將放棄由ID降回命令行。

因此,要獲得最後一排,你可以這樣做:

select * 
    from (select * from grade_master order by id desc) 
    where rownum = 1 

的ROWNUM確定之前,「排序依據」條款進行評估,所以這是什麼查詢正在做的是訂貨下降的行(裏面查詢),然後將此有序集合賦予外部查詢。外部獲取集合的第一行然後返回它。

+0

謝謝你的大腦。這很好 – Belinda

1

這樣的要求是有道理的,如果你指定結果的排序順序 - 有在數據庫中沒有這樣的事情「第一」,如果不指定排序順序「最後」行。

SQL> with t as (
    2 select 'X' a, 1 b from dual union all 
    3 select 'C' , 2 from dual union all 
    4 select 'A' a, 3 b from dual 
    5 ) 
    6 select a, b, decode(rn, 1, 'First','Last') 
    7 from (
    8 select a, b, row_number() over(order by a) rn, 
    9 count(*) over() cn 
10 from t 
11 ) 
12 where rn in (1, cn) 
13 order by rn 
14/

A   B DECOD                
- ---------- -----                
A   3 First                
X   1 Last