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