概述
要求
将trainCrossroadFlow1-19合并导入数据库,将每[0,5)分钟相同direction,crossroad的数据进行数量统计,储存为新的csv文件,处理前文件格式如下:
direction | laneID | timestamp | crossroadID | vehicleID |
---|---|---|---|---|
5 | 1 | 2019-08-20 07:27:27 | 100120 | 鲁B-b406588b21181696 |
目标格式如下:
direction | startTime | endTime | crossroadID | vehicleNum |
---|---|---|---|---|
1 | 2019/8/1 7:00 | 2019/8/1 7:05 | 100120 | xx |
3 | 2019/8/1 7:05 | 2019/8/1 7:10 | 100120 | xx |
处理方法不限,推荐使用数据库,处理速度快。
解决方案
第一步
将timestamp(varchar)字段转成datetime类型 保存成的表test_trafficflow_01
CREATE TABLE test_trafficflow_01 AS SELECT
direction,
crossroadID,
UNIX_TIMESTAMP(
STR_TO_DATE(
`timestamp`,
'%Y-%m-%d %H:%i:%S'
)
) AS create_time,
laneID,
vehicleID
FROM
test_trafficflow
第二步
按照direction,crossroadID,startTIme,分组,并保存为表test_trafficflow_02
关于按时间段分组的实现,基本思路是:将时间戳对5分钟求余,原时间戳减去余数部分代表五分钟的开始点,原时间戳减去余数部分再加上5分钟代表五分钟的结束点,换句话说就是将时间的精度变低了,然后就可以根据这个低精度的时间进行分组了。
create table test_trafficflow_02 AS SELECT
direction,
crossroadID,
concat(
from_unixtime(
create_time - create_time % 300,'%Y/%m/%d %H:%i:%s'
)
) AS startTime,
from_unixtime(
create_time - create_time % 300 + 300,'%Y/%m/%d %H:%i:%s'
) AS endTime ,
count(1) as vehicleNum
FROM
test_trafficflow_01
group by
direction,
crossroadID,
startTime
ORDER BY
direction,
crossroadID,
startTime;
第三步
验证
由于不确定以上思路是否可行,选两条统计结果进行验证
#测试
#BETWEEN 1564614000 and 1564614300代表2019/08/01 07:00:00~2019/08/01 07:05:00,看看这个时间段direction为1、crossRoadID为100001的车辆数量是否为统计出来的19辆
#BETWEEN 1564617300 and 1564617600代表2019/08/01 07:55:00~2019/08/01 08:00:00,看看这个时间段direction为1、crossRoadID为100001 的车辆数量是否为统计出来的52辆
SELECT
direction,
crossroadID,
concat(
from_unixtime(
create_time - create_time % 300,'%Y/%m/%d %H:%i:%s'
)
) AS startTime,
from_unixtime(
create_time - create_time % 300 + 300,'%Y/%m/%d %H:%i:%s'
) AS endTime ,
count(1) as vehicleNum
FROM
train_trafficflow_01
where (create_time BETWEEN 1564617300 and 1564617600) AND (`direction`='1')AND (`crossroadID`='100001')
group by
direction,
crossroadID,
startTime
ORDER BY
direction,
crossroadID,
startTime;
最后
以上就是无奈皮皮虾为你收集整理的用SQL统计每五分钟内经过某路口、某方向的车的数量要求解决方案的全部内容,希望文章能够帮你解决用SQL统计每五分钟内经过某路口、某方向的车的数量要求解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复