oracle查询分组后,每组中最大的数据和第二的数据

131 阅读1分钟

微信技术群:Day9884125

一、背景

   例如有一张数据库表login,它里面记录着用户每次登录的信息,其中有我们关注的三个字段,分别是账号,登录日期,和登录时间。
   现在我们要查询这个表里面每个用户最新一次登录系统在login表中的数据。

-- 要求每个用户,所以我们按账号分组,然后再对日期和时间进行降序排序
select userId, loginDate, loninTime, address from(
    select userId, loginDate, loninTime, address, 
    row_number() over(partition by userId order by loginDate desc, loninTime desc) rn from login
) re 
where re.rn = 1;

   现在我们要查询这个表里面每个用户倒数第二次登录系统在login表中的数据。

-- 要求每个用户,所以我们按账号分组,然后再对日期和时间进行降序排序
--- 说明,如果初次登录,查询结果为空
select userId, loginDate, loninTime, address from(
    select userId, loginDate, loninTime, address, 
    row_number() over(partition by userId order by loginDate desc, loninTime desc) rn from login
) re 
where re.rn > 1 and re.rn <= 2;