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

本文介绍了一种在Oracle数据库中获取非首次登录用户的上次登录时间的方法。通过使用嵌套子查询和ROWNUM来定位第二大登录时间值,解决了直接使用ROWNUM筛选记录导致的数据无法返回问题。

业务需求:

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


实现逻辑:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值