使用SQL实现车流量的计算的示例代码
作者:每日小新 发布时间:2024-01-21 21:53:13
标签:SQL,车流量
卡口转换率
将数据导入hive,通过SparkSql编写sql,实现不同业务的数据计算实现,主要讲述车辆卡口转换率,卡口转化率:主要计算不同卡口下车辆之间的流向,求出之间的转换率。
1、查出每个地区下每个路段下的车流量
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的结果,与自身进行错位链接,并以车牌为分区,拼接经过卡口的过程
(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,…等的车辆数有哪些,即拿上面的行车记录字段进行分区在进行统计
(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
来源:https://blog.csdn.net/llAl_lAll/article/details/123134334


猜你喜欢
- 问题你要处理由大量不同类型的对象组成的复杂数据结构,每一个对象都需要需要进行不同的处理。比如,遍历一个树形结构,然后根据每个节点的相应状态执
- 是的,我在这里要说:注册表单将死(好拗口啊,但是不知道怎么翻译更恰当)。回想一下,当你想享受一个网站服务的时候,碰到的第一件事是什么?一个表
- 一、需求 + 最终实现注:只是前端实现1. 需求需求来源是因为有一个做嵌入式 C/C++的 * 做了一个远程计算器。 需求是要求支持输入一个四
- 4个不常用HTML标签optgroup、sub、sup和bdo运行代码框:<title>4个不常用HTML标签optgroup、
- 本文实例讲述了Python3.5多进程原理与用法。分享给大家供大家参考,具体如下:进程类:Process示例及代码:(1)创建函数作为单进程
- 在Python中,当我们有两个字典需要合并的时候,可以使用字典的 update 方法,例如:a = {'a': 1,
- 有时候为了自动化测试网页,我们往往希望能够使用一些脚本语言控制浏览器. 通过脚本模拟一些浏览器动作,然后测试得到的结果.这里, 我们讲解一下
- 为最终用户提供的功能主要由一个HTML文件和两个ASP文件提供,它们负责接受用户的订阅申请以及退出邮件列表申请。 用户的个人信息在图1所示的
- 随着移动端的用户越来越多,传统的web系统架构无法兼容很多移动终端的正常使用。在工作中也会发现,现在很多的客户都有在手机、平板等移动终端上使
- 比如 1--1 2--1  
- 前言需要从数据库检索某些符合要求的数据,我们很容易写出 Select A B C FROM T WHERE ID = XX 这样
- WeTest 导读小程序科普类的文章已经很多了,今天这里讲的是针对小程序的优化方法,可以有效提高小程序的响应速度和用户体验。当然,开发体验也
- 前言python内置了一些非常巧妙而且强大的内置函数,对初学者来说,一般不怎么用到,我也是用了一段时间python之后才发现,哇还有这么好的
- numpy.ndarray添加元素平常使用的比较多的是list,在list后面添加元素直接是data_list = []data_list.
- 在使用Matlab肯定会碰到Matlab求解数组中的最大值以及它所在的位置的问题。博主开始用循环的方法找,既浪费时间又消耗资源,后面查找后才
- Nodejs 连接 mysql时报Error: Cannot enqueue Query after fatal error错误的处理办法一
- PyQt实现界面翻转切换效果是用qt的场景功能来实现的,用到了QGraphicsView,QGraphicsLinearLayout,QGr
- 简介概念散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法
- PyQt中的线程类 QtCore.QThread ,使用时继承QThread类启动界面的线程暂称为UI线程。界面执行命令时都在自己的UI线程
- 本文实例讲述了php查询mysql数据库并将结果保存到数组的方法。分享给大家供大家参考。具体分析如下:这里主要用到了mysql_fetch_