oracle數據表查詢某個字段的第二大值

業務需求:

登陸後在頁面顯示該用戶上次登錄信息


實現邏輯:

1、首次登錄 略

2、非首次登錄,將操作日誌表(sys_log)的登錄時間字段(login_time varchar2(14))降序排列,取第二大值。


SQL腳本如下:

select *
  from (select rownum r, login_time
          from (select login_time from sys_log t order by login_time desc) 
         where rownum < 3)  e
 where e.r > 1; 


常見錯誤腳本

select * from  (select login_time from sys_log t order by login_time desc)  where rownum>1  and rownum<3


錯誤原因

rownum是oracle預處理字段,默認標序是1,只有記錄集中具有rownum字段條件後纔會進行後續編號。

查詢sys_log表時遍歷第一條數據時rownum是1,不符合條件,繼續遍歷到第二條數據rownum仍爲1,仍不符合條件,所以都無數據返回。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章