使用SQL實(shí)現(xiàn)車(chē)流量的計(jì)算的示例代碼
卡口轉(zhuǎn)換率
將數(shù)據(jù)導(dǎo)入hive,通過(guò)SparkSql編寫(xiě)sql,實(shí)現(xiàn)不同業(yè)務(wù)的數(shù)據(jù)計(jì)算實(shí)現(xiàn),主要講述車(chē)輛卡口轉(zhuǎn)換率,卡口轉(zhuǎn)化率:主要計(jì)算不同卡口下車(chē)輛之間的流向,求出之間的轉(zhuǎn)換率。
1、查出每個(gè)地區(qū)下每個(gè)路段下的車(chē)流量
select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action
此結(jié)果做為表1,方便后面錯(cuò)位連接使用
2、通過(guò)錯(cuò)位連接獲取每輛車(chē)的行車(chē)記錄
通過(guò)表1的結(jié)果,與自身進(jìn)行錯(cuò)位鏈接,并以車(chē)牌為分區(qū),拼接經(jīng)過(guò)卡口的過(guò)程
(select t1.car, t1.monitor_id, concat(t1.monitor_id, "->", t2.monitor_id) as way from ( select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action) t1 left join ( select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action) t2 on t1.car = t2.car and t1.n1 = t2.n1-1 where t2.action_time is not null)
獲取到每輛車(chē)的一個(gè)行車(chē)記錄,經(jīng)過(guò)的卡口
3、獲取行車(chē)過(guò)程中的車(chē)輛數(shù)
獲取卡口1~卡口2,…等的車(chē)輛數(shù)有哪些,即拿上面的行車(chē)記錄字段進(jìn)行分區(qū)在進(jìn)行統(tǒng)計(jì)
(select s1.way, COUNT(1) sumCar from --行車(chē)過(guò)程 (select t1.car, t1.monitor_id, concat(t1.monitor_id, "->", t2.monitor_id) as way from ( select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action) t1 left join ( select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action) t2 on t1.car = t2.car and t1.n1 = t2.n1-1 where t2.action_time is not null)s1 group by way)
4、獲取每個(gè)卡口的總車(chē)輛數(shù)
獲取每個(gè)卡口最初的車(chē)輛數(shù),方便后面拿行車(chē)軌跡車(chē)輛數(shù)/總車(chē)輛數(shù),得出卡口之間的轉(zhuǎn)換率
select monitor_id , COUNT(1) sumall from traffic.hive_flow_action group by monitor_id
5、求出卡口之間的轉(zhuǎn)換率
select s2.way, s2.sumCar / s3.sumall zhl from ( select s1.way, COUNT(1) sumCar from --行車(chē)過(guò)程 ( select t1.car, t1.monitor_id, concat(t1.monitor_id, "->", t2.monitor_id) as way from ( select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action) t1 left join ( select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action) t2 on t1.car = t2.car and t1.n1 = t2.n1-1 where t2.action_time is not null)s1 group by way)s2 left join --每個(gè)卡口總車(chē)數(shù) ( select monitor_id , COUNT(1) sumall from traffic.hive_flow_action group by monitor_id) s3 on split(s2.way, "->")[0]= s3.monitor_id
到此這篇關(guān)于使用SQL實(shí)現(xiàn)車(chē)流量的計(jì)算的示例代碼的文章就介紹到這了,更多相關(guān)SQL 車(chē)流量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MS SQL Server獲取十二個(gè)月份的英文縮寫(xiě)
十二個(gè)月份的英文縮寫(xiě),只有五月份是全稱與縮寫(xiě)一樣,其它月份的縮寫(xiě)僅是取前三位字母。因此Insus.NET寫(xiě)成一個(gè)自定義函數(shù)獲取月份名稱縮寫(xiě),感興趣的朋友可以了解下2013-01-01SQLSERVER中得到執(zhí)行計(jì)劃的兩種方式
得到執(zhí)行計(jì)劃的方式有兩種:一種是在指令的前面打開(kāi)一些開(kāi)關(guān),讓執(zhí)行計(jì)劃信息打在結(jié)果集里,這種方法比較適合在一個(gè)測(cè)試環(huán)境里對(duì)單個(gè)語(yǔ)句調(diào)優(yōu);另一種方法是使用SQL Trace里的事件跟蹤來(lái)跟蹤語(yǔ)句的執(zhí)行計(jì)劃,感興趣的朋友可以了解下2013-01-01SQL Server 觸發(fā)器 表的特定字段更新時(shí),觸發(fā)Update觸發(fā)器
另外再補(bǔ)充一句:insert和update的數(shù)據(jù)都會(huì)保存在臨時(shí)表中,所以使用inserted可以取出這些數(shù)據(jù),刪除時(shí)使用deleted可以取出被刪除的數(shù)據(jù)2009-08-08談?wù)剆qlserver自定義函數(shù)與存儲(chǔ)過(guò)程的區(qū)別
這篇文章主要介紹了談?wù)剆qlserver自定義函數(shù)與存儲(chǔ)過(guò)程的區(qū)別,需要的朋友可以參考下2014-09-09使用xp_cmdshell注銷Windows登錄用戶(終端服務(wù)器超出最大連接數(shù))
關(guān)于終端服務(wù)器超出最大連接數(shù)的解決方法有很多種,最簡(jiǎn)單的就是下載加強(qiáng)版本客戶端即可,下面的文章主要是介紹了sqlserver中通過(guò)xp_cmdshell用戶2012-12-12小米正式開(kāi)源 SQL 智能優(yōu)化與改寫(xiě)工具 SOAR
SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能優(yōu)化與改寫(xiě)工具,由小米運(yùn)維 DBA 團(tuán)隊(duì)出品。下面通過(guò)本文給大家分享小米正式開(kāi)源 SQL 智能優(yōu)化與改寫(xiě)工具 SOAR,感興趣的朋友一起看看吧2018-11-11通過(guò)系統(tǒng)數(shù)據(jù)庫(kù)獲取用戶所有數(shù)據(jù)庫(kù)中的視圖、表、存儲(chǔ)過(guò)程
本文主要講了通過(guò)系統(tǒng)數(shù)據(jù)庫(kù)獲取用戶所有數(shù)據(jù)庫(kù)中的視圖、表、存儲(chǔ)過(guò)程的方法,大家參考使用吧2014-04-04