oracle数据表查询某个字段的第二大值

时间:2021-09-26 14:58:03

业务需求:

登陆后在页面显示该用户上次登录信息


实现逻辑:

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,仍不符合条件,所以都无数据返回。