Teradata分頁排序

Teradata分頁排序
 
 1. 選取排序後的前N條記錄
Sql代碼 
1.select top 3 e_name from ptemp.cuishen_temp_20100707  
2.order by id 
  www.2cto.com  
Sql代碼
1.select top 3 * from ptemp.cuishen_temp_20100707  
2.order by id 
 
2. 用rank給記錄排名
默認是降序排名
Sql代碼
1.select rank(e_name), id, e_name from ptemp.cuishen_temp_20100707_2  
2.qualify rank(e_name) <> 2 
 
也可以指定asc關鍵字進行升序排名
Sql代碼
1.select rank(e_name asc), id, e_name from ptemp.cuishen_temp_20100707_2  
2.qualify rank(e_name asc) <= 2 
 
其中  www.2cto.com  
Sql代碼
1.qualify rank(e_name asc) <= 2 
子句表示對結果集進行限制,選取e_name字段升序排名前2的記錄
限定條件當然也可以這樣寫:
Sql代碼
1.select rank(name asc), id, name from ptemp.cuishen_temp_20100707  
2.qualify rank(name asc) >= 2 and rank(name asc) <= 5 
 
3. 分頁查詢
可以用row_number關鍵字來進行分頁查詢,例如:
Sql代碼
1.select * from ptemp.cuishen_temp_20100707  
2.qualify row_number() over(order by id) >= 2 and row_number() over(order by id) <= 5 
 
4. row_number和rank的區別
row_number:顧名思意,就是行號,不管記錄相不相同,行號都是不同的。 
rank:對於不同的記錄排名當然是不同的,而對於相同的記錄排名是相同的,這就是爲什麼分頁查詢不用rank來做的原因。
5. 可以用PARTITION BY關鍵字進行去重排名查詢
Sql代碼
1.select * from ptemp.cuishen_temp_20100707  
2.QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY id) = 1 
上句表示:按id字段排序,取每段重複id記錄的TOP 1。千萬注意:這個不能用rank來做。
發佈了57 篇原創文章 · 獲贊 26 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章