每天的指標(biāo)統(tǒng)計(jì)關(guān)鍵點(diǎn)是:如果這一天沒(méi)有新增客戶(hù)醉冤,但也需要給出值為0秩霍,也就是說(shuō)實(shí)際統(tǒng)計(jì)的日期中沒(méi)有某天的日期,需要如何操作呢蚁阳?
實(shí)戰(zhàn):創(chuàng)建時(shí)間維度的表铃绒,以天為單位,具體方法可自己查詢(xún)螺捐。這時(shí)候用此時(shí)間維度表left join關(guān)聯(lián)我們統(tǒng)計(jì)的結(jié)果即可颠悬,為null的值也就是沒(méi)有新增客戶(hù),用nvl轉(zhuǎn)化為0即可定血,這樣就能得出所要?dú)v史每天的新增客戶(hù)數(shù)赔癌;
每一天的的累計(jì)客戶(hù)呢?
實(shí)戰(zhàn):由歷史每天的新增客戶(hù)表澜沟,用sum()over(partition by xx order by xx? asc)? as aaa 灾票,aaa就是每天的累計(jì)客戶(hù),原理為計(jì)算每個(gè)分區(qū)從第一行累加到當(dāng)前行茫虽,sum的窗口函數(shù)還有其它用法刊苍,具體的用法自己查詢(xún);這里還有有一個(gè)不太適合的方法濒析,就是在新增客戶(hù)表t1 inner join 新增客戶(hù)表 t2正什,然后根據(jù)t1.date>t2.date,由sum求出号杏,這里就會(huì)產(chǎn)生笛卡爾積婴氮,當(dāng)歷史的天數(shù)比較多時(shí),這種方法非常不合時(shí)宜盾致,應(yīng)避免莹妒。
每一周的新增客戶(hù)呢?
思路:每一天的新增客戶(hù)給出绰上,就是把某天的新增客戶(hù)都轉(zhuǎn)化為所在周的周天旨怠,按周天聚合累加
實(shí)戰(zhàn):選取歷史最早的周天日期a,拿某一天x減去a再除以7取余數(shù)蜈块,sql為:
case when pmod(datedifff(x,a),7)= '0'? then x
when pmod(datedifff(x,a),7)= '1'? then??date_sub(x,'1')--周一轉(zhuǎn)化為周日
when pmod(datedifff(x,a),7)= '2'? then date_sub(x,'2')--周二轉(zhuǎn)化為周日
when pmod(datedifff(x,a),7)= '3'? then date_sub(x,'3')--周三轉(zhuǎn)化為周日
when pmod(datedifff(x,a),7)= '4'? then ?date_sub(x,'4')--周四轉(zhuǎn)化為周日
when pmod(datedifff(x,a),7)= '5'? then ?date_sub(x,'5')--周五轉(zhuǎn)化為周日
when pmod(datedifff(x,a),7)= '6'? then ?date_sub(x,'6')--周六轉(zhuǎn)化為周日
end as date
每一月的新增客戶(hù)比較簡(jiǎn)單:直接用substr去日期的前7位?substr(date, 1, 7),按月累加鉴腻。
實(shí)時(shí)上我們對(duì)時(shí)間操作是完全可以把date當(dāng)成一個(gè)字符串去處理再結(jié)合日期函數(shù)獲取想要的結(jié)果,而不局限于只用日期函數(shù)去處理百揭。有疑問(wèn)可評(píng)論爽哎,謝謝觀看!