工作中行转列的小需求

很久没有更新博客了,最近工作事情比较杂多,还给自己报考了驾校(一个到现在才去学车的人,真的很懒了)
产品有一个需求是这样的,要看一个用户最后三次的登录时间,并且按列展示。
t_member 表是用户表(记录用户id和一些用户信息),
t_member_log 表是登录日志表,记录的是用户和登录时间。


一看到这个需求就想到了行转列,以下就是实现方式
select m.account_no 电子账号,
       m.member_usguid 用户ID,
       to_char(m.crt_dt, 'yyyymmdd hh24:mi:ss') 注册时间,
       login_tm1 最后一次登录时间,
       login_tm2 倒数第二次登录时间,
       login_tm3 倒数第三次登录时间
  from  t_member m
  left outer join (select member_cd,
                          max(case
                                when rn = 1 then
                                 login_tm
                              end) login_tm1,
                          max(case
                                when rn = 2 then
                                 login_tm
                              end) login_tm2,
                          max(case
                                when rn = 3 then
                                 login_tm
                              end) login_tm3 
                     from (select member_cd,
                                  to_char(g.login_dt, 'yyyy-mm-dd:hh24:mi:ss') login_tm,
                                  to_char(g.login_dt, 'yyyymmdd') login_dt,
                                  row_number() over(partition by g.member_cd order by g.login_dt desc) rn
                             from  t_member_log g)
                    where rn <= 3
                    group by member_cd) lg
    on (m.member_cd = lg.member_Cd)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值