業務需求:
登陸後在頁面顯示該用戶上次登錄信息
實現邏輯:
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,仍不符合條件,所以都無數據返回。