SQL中的LEAD函數(shù),在數(shù)據(jù)分析中有什么作用?
點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,
設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨
本文系粉絲投稿,歡迎有寫技術(shù)文章的小伙伴投稿
Vintage分析
? ? ? Vintage分析用到信貸資產(chǎn)行業(yè),指的是每個(gè)月貸款的資產(chǎn)質(zhì)量情況,要直接跟每個(gè)相同時(shí)間段內(nèi)的余額做比較。注意這里比較有個(gè)前提,就是比較的事物應(yīng)該是位于同一層面上的,不能將不同賬齡的放款質(zhì)量進(jìn)行對比,要按賬齡(month of book,MOB)的長短同步對比,從而了解同一產(chǎn)品不同時(shí)期放款的資產(chǎn)質(zhì)量情況。Vintage分析方法能很好地解決時(shí)滯性問題,其核心思想是對不同時(shí)期的開戶的資產(chǎn)進(jìn)行分別跟蹤,按照賬齡的長短進(jìn)行同步對比,從而了解不同時(shí)期發(fā)行信用卡的資產(chǎn)質(zhì)量情況。
需求描述
? ? ? ? Vintage分析目前被廣泛應(yīng)用于信用卡產(chǎn)業(yè)。舉例說明根據(jù)賬齡所做的拖欠二周期賬戶的Vintage分析,原始數(shù)據(jù)見表1:

第一行數(shù)據(jù)意思是:數(shù)據(jù)2.12%為2018年4月所發(fā)信用卡在2018年7月時(shí)拖欠二周期的金額除以該批信用卡在2018年7月時(shí)透支余額,依此類推,得到全表的數(shù)據(jù)。在此基礎(chǔ)上,按照賬齡為經(jīng)營時(shí)間減去發(fā)卡時(shí)間進(jìn)行表間數(shù)據(jù)的轉(zhuǎn)換,得到MOB,得到表2:

通過vintage報(bào)表,可以看出,不同月份的發(fā)卡賬戶的同一mob下的拖欠率的變化情況。
這里我們的需求是:怎么將表1格式的數(shù)據(jù)轉(zhuǎn)換成表2格式的數(shù)據(jù)?
需求實(shí)現(xiàn)
插入數(shù)據(jù)
? ? ?同樣這里假定已經(jīng)存在表WN_table,含有date_faka、date_mob、overduerate這3個(gè)字段:
insert?into?WN_table values('2018-04', '2018-07', '2.12');
insert?into?WN_table values('2018-04', '2018-08', '2.19');
insert?into?WN_table values('2018-04', '2018-09', '3.1 ');
insert?into?WN_table values('2018-04', '2018-10', '2.58');
insert?into?WN_table values('2018-04', '2018-11', '2.65');
insert?into?WN_table values('2018-04', '2018-12', '2.84');
insert?into?WN_table values('2018-05', '2018-08', '2.47');
insert?into?WN_table values('2018-05', '2018-09', '2.52');
insert?into?WN_table values('2018-05', '2018-10', '2.53');
insert?into?WN_table values('2018-05', '2018-11', '2.52');
insert?into?WN_table values('2018-05', '2018-12', '2.49');
insert?into?WN_table values('2018-06', '2018-09', '1.63');
insert?into?WN_table values('2018-06', '2018-10', '1.88');
insert?into?WN_table values('2018-06', '2018-11', '1.87');
insert?into?WN_table values('2018-06', '2018-12', '2.1 ');
insert?into?WN_table values('2018-07', '2018-10', '3.32');
insert?into?WN_table values('2018-07', '2018-11', '3.88');
insert?into?WN_table values('2018-07', '2018-12', '3.46');
insert?into?WN_table values('2018-08', '2018-11', '2.37');
insert?into?WN_table values('2018-08', '2018-12', '1.46');
insert?into?WN_table values('2018-09', '2018-12', '2.51');(提示:可以左右滑動代碼)
Vintage報(bào)表
這里我們?nèi)匀皇褂肔EAD窗口函數(shù)實(shí)現(xiàn)我們的需求:
如果對LEAD函數(shù)使用有疑問的朋友,可以先閱讀LEAD函數(shù)的具體介紹:
SQL Server中的LAG函數(shù)與LEAD函數(shù)介紹
select
date_faka, M3,M4, M5, M6, M7, M8
from
(
select?date_faka, overduerate M3,
lead(overduerate,1) over(partition?by?date_faka order?by?date_mob) M4,
lead(overduerate,2) over(partition?by?date_faka order?by?date_mob) M5,
lead(overduerate,3) over(partition?by?date_faka order?by?date_mob) M6,
lead(overduerate,4) over(partition?by?date_faka order?by?date_mob) M7,
lead(overduerate,5) over(partition?by?date_faka order?by?date_mob) M8,
row_number() over(partition?by?date_faka order?by?date_mob) row_num
from?WN_table
) t
where?row_num = 1
當(dāng)然,也可以不將NULL呈現(xiàn)出來:
select
date_faka,
case?when?M3 is?null?then?''?else?M3 end?M3,
case?when?M4 is?null?then?''?else?M3 end?M4,
case?when?M5 is?null?then?''?else?M3 end?M5,
case?when?M6 is?null?then?''?else?M3 end?M6,
case?when?M7 is?null?then?''?else?M3 end?M7,
case?when?M8 is?null?then?''?else?M3 end?M8
from
(
select?date_faka, overduerate M3,
lead(overduerate,1) over(partition?by?date_faka order?by?date_mob) M4,
lead(overduerate,2) over(partition?by?date_faka order?by?date_mob) M5,
lead(overduerate,3) over(partition?by?date_faka order?by?date_mob) M6,
lead(overduerate,4) over(partition?by?date_faka order?by?date_mob) M7,
lead(overduerate,5) over(partition?by?date_faka order?by?date_mob) M8,
row_number() over(partition?by?date_faka order?by?date_mob) row_num
from?WN_table
) t
where?row_num = 1總結(jié)
這里我們使用窗口函數(shù)制作了vintage報(bào)表,也可以使用相同的代碼制作客戶留存率等,例如商城不同月份注冊客戶在不同mob下的留存率等。
——End——
后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨 后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。 推薦閱讀
這是一個(gè)能學(xué)到技術(shù)的公眾號,歡迎關(guān)注
