1.同比查詢(今天和昨天相比)
select DATE_FORMAT(t5.date,'%Y/%m/%d') day,SUM(t5.newhan) num, CASE WHEN SUM(t5.oldhan) IS NULL OR SUM(t5.oldhan) = 0 THEN 0 WHEN SUM(t5.newhan) IS NULL OR SUM(t5.newhan) = 0 THEN 0 ELSE CONCAT(FORMAT(((t5.newhan-t5.oldhan)/t5.oldhan)*100,2),'%') END yoy from ( select t3.day as date,t3.day_pv as newhan,t2.day_pv1 as oldhan from (select date_format(start_time, '%Y-%m-%d') as day,sum(pv) as day_pv from page_data group by day) t3 left join ( select date_add(t1.day,INTERVAL 1 DAY) as last_day,t1.day_pv as day_pv1 from (select date_format(start_time, '%Y-%m-%d') as day,sum(pv) as day_pv from page_data group by day) t1 ) t2 on t3.day=t2.last_day ) t5 WHERE DATE_FORMAT(t5.date,'%Y-%m-%d') between '2020-06-01' and '2020-07-24' GROUP BY t5.date
注:
DATE_FORMAT() 函數用於以不同的格式顯示日期/時間數據。 %Y:年,4 位; %m:月,數值(00-12); %d: 月的天,數值(00-31). FORMAT()函數:可以將數據格式化為整數或者帶幾位小數的浮點數(四舍五入); CONCAT(str1,str2,…): 返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。
INTERVAL 代表的是時間間隔
同比結果
2.同比環比聯合查詢(環比,今天和上周相比)
select DATE_FORMAT(t5.date,'%Y/%m/%d') day,SUM(t5.newhan) num, CASE WHEN SUM(t5.oldhan) IS NULL OR SUM(t5.oldhan) = 0 THEN 0 WHEN SUM(t5.newhan) IS NULL OR SUM(t5.newhan) = 0 THEN 0 ELSE CONCAT(FORMAT(((t5.newhan-t5.oldhan)/t5.oldhan)*100,2),'%') END yoy, CASE WHEN SUM(t5.oldhan7) IS NULL OR SUM(t5.oldhan7) = 0 THEN 0 WHEN SUM(t5.newhan) IS NULL OR SUM(t5.newhan) = 0 THEN 0 ELSE CONCAT(FORMAT(((t5.newhan-t5.oldhan7)/t5.oldhan7)*100,2),'%') END mom from ( select t3.day as date,t3.day_pv as newhan,t2.day_pv1 as oldhan,t7.day_pv7 oldhan7 from (select date_format(start_time, '%Y-%m-%d') as day,sum(pv) as day_pv from page_data group by day) t3 left join ( select date_add(t1.day,INTERVAL 1 DAY) as last_day,t1.day_pv as day_pv1 from (select date_format(start_time, '%Y-%m-%d') as day,sum(pv) as day_pv from page_data group by day) t1 ) t2 on t3.day=t2.last_day LEFT JOIN ( select date_add(t1.day7,INTERVAL 7 DAY) as last_day7,t1.day_pv7 as day_pv7 from (select date_format(start_time, '%Y-%m-%d') as day7,sum(pv) as day_pv7 from page_data group by day7) t1 ) t7 ON t3.day=t7.last_day7 ) t5 WHERE DATE_FORMAT(t5.date,'%Y-%m-%d') between '2020-06-01' and '2020-07-24' GROUP BY t5.date
同比環比聯合查詢返回結果
3.時間段內同比環比統計查詢
SELECT '瀏覽量' text,DATE_FORMAT('2020-06-01','%Y/%m/%d') startTime,DATE_FORMAT('2020-07-24','%Y/%m/%d') endTime,SUM(tpv.num) number,CONCAT(FORMAT(SUM(tpv.yoy)*100,2),'%') yoys,CONCAT(FORMAT(SUM(tpv.mom)*100,2),'%') moms FROM (select t5.date pvDate,t5.eTime pveTime,SUM(t5.newhan) num, ((t5.newhan-t5.oldhan)/t5.oldhan) yoy, ((t5.newhan-t5.oldhan7)/t5.oldhan7) mom from ( select t3.day as date,t3.day_pv as newhan,t2.day_pv1 as oldhan,t7.day_pv7 oldhan7,t3.endTime eTime from (select date_format(start_time, '%Y-%m-%d') as day,sum(pv) as day_pv,date_format(end_time, '%Y-%m-%d') endTime from page_data group by day) t3 left join ( select date_add(t1.day,INTERVAL 1 DAY) as last_day,t1.day_pv as day_pv1 from (select date_format(start_time, '%Y-%m-%d') as day,sum(pv) as day_pv from page_data group by day) t1 ) t2 on t3.day=t2.last_day LEFT JOIN ( select date_add(t1.day7,INTERVAL 7 DAY) as last_day7,t1.day_pv7 as day_pv7 from (select date_format(start_time, '%Y-%m-%d') as day7,sum(pv) as day_pv7 from page_data group by day7) t1 ) t7 ON t3.day=t7.last_day7 ) t5 WHERE DATE_FORMAT(t5.date,'%Y-%m-%d') between '2020-06-01' and '2020-07-24' GROUP BY t5.date) tpv
返回結果