在項目開發過程中大量的使用了分頁查詢,當想要讓數據按照日期排序時,出現了很多重復的數據出現。 造成這一問題出現的原因是:在數據中,日期的值不是唯一的。我們知道
Oracle的分頁查詢是沒有進行任何排序操作的,Oracle是順序的從數據塊中讀取符合條件的數據返回到客戶端。而Oracle的排序算法不具有穩定性,也就是說,對於鍵值相等的
數據,這種算法完成排序後,不保證這些鍵值相等的數據保持排序前的順序。
解決這一問題的方法就是在後邊增加一個唯一性列,比如主鍵,問題解決。
select * from
(
select a.*, rownum rn from
( select * from user u order by u.createdate desc, u.id desc ) a
where rownum <=20
) b
where b.rn >=0