我是靠谱客的博主 无奈皮皮虾,最近开发中收集的这篇文章主要介绍用SQL统计每五分钟内经过某路口、某方向的车的数量要求解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

要求

将trainCrossroadFlow1-19合并导入数据库,将每[0,5)分钟相同direction,crossroad的数据进行数量统计,储存为新的csv文件,处理前文件格式如下:

directionlaneIDtimestampcrossroadIDvehicleID
512019-08-20 07:27:27100120鲁B-b406588b21181696

目标格式如下:

directionstartTimeendTimecrossroadIDvehicleNum
12019/8/1 7:002019/8/1 7:05100120xx
32019/8/1 7:052019/8/1 7:10100120xx

处理方法不限,推荐使用数据库,处理速度快。

解决方案

第一步

将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统计每五分钟内经过某路口、某方向的车的数量要求解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(20)

评论列表共有 0 条评论

立即
投稿
返回
顶部