工作中行轉列的小需求

很久沒有更新博客了,最近工作事情比較雜多,還給自己報考了駕校(一個到現在纔去學車的人,真的很懶了)
產品有一個需求是這樣的,要看一個用戶最後三次的登錄時間,並且按列展示。
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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章