使用SQL實現車流量的計算的示例代碼
卡口轉換率
將數據導入hive,通過SparkSql編寫sql,實現不同業(yè)務的數據計算實現,主要講述車輛卡口轉換率,卡口轉化率:主要計算不同卡口下車輛之間的流向,求出之間的轉換率。
1、查出每個地區(qū)下每個路段下的車流量
select car, monitor_id, action_time, ROW_NUMBER () OVER (PARTITION by car ORDER by action_time) as n1 FROM traffic.hive_flow_action
此結果做為表1,方便后面錯位連接使用
2、通過錯位連接獲取每輛車的行車記錄
通過表1的結果,與自身進行錯位鏈接,并以車牌為分區(qū),拼接經過卡口的過程
(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)
獲取到每輛車的一個行車記錄,經過的卡口
3、獲取行車過程中的車輛數
獲取卡口1~卡口2,…等的車輛數有哪些,即拿上面的行車記錄字段進行分區(qū)在進行統(tǒng)計
(select s1.way, COUNT(1) sumCar from --行車過程 (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、獲取每個卡口的總車輛數
獲取每個卡口最初的車輛數,方便后面拿行車軌跡車輛數/總車輛數,得出卡口之間的轉換率
select monitor_id , COUNT(1) sumall from traffic.hive_flow_action group by monitor_id
5、求出卡口之間的轉換率
select s2.way, s2.sumCar / s3.sumall zhl from ( select s1.way, COUNT(1) sumCar from --行車過程 ( 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 --每個卡口總車數 ( select monitor_id , COUNT(1) sumall from traffic.hive_flow_action group by monitor_id) s3 on split(s2.way, "->")[0]= s3.monitor_id
到此這篇關于使用SQL實現車流量的計算的示例代碼的文章就介紹到這了,更多相關SQL 車流量內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SQL Server 觸發(fā)器 表的特定字段更新時,觸發(fā)Update觸發(fā)器
另外再補充一句:insert和update的數據都會保存在臨時表中,所以使用inserted可以取出這些數據,刪除時使用deleted可以取出被刪除的數據2009-08-08使用xp_cmdshell注銷Windows登錄用戶(終端服務器超出最大連接數)
關于終端服務器超出最大連接數的解決方法有很多種,最簡單的就是下載加強版本客戶端即可,下面的文章主要是介紹了sqlserver中通過xp_cmdshell用戶2012-12-12小米正式開源 SQL 智能優(yōu)化與改寫工具 SOAR
SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能優(yōu)化與改寫工具,由小米運維 DBA 團隊出品。下面通過本文給大家分享小米正式開源 SQL 智能優(yōu)化與改寫工具 SOAR,感興趣的朋友一起看看吧2018-11-11通過系統(tǒng)數據庫獲取用戶所有數據庫中的視圖、表、存儲過程
本文主要講了通過系統(tǒng)數據庫獲取用戶所有數據庫中的視圖、表、存儲過程的方法,大家參考使用吧2014-04-04