我有下表 mytable
在Hive中:
id radar_id car_id datetime
1 A21 123 2017-03-08 17:31:19.0
2 A21 555 2017-03-08 17:32:00.0
3 A21 777 2017-03-08 17:33:00.0
4 B15 123 2017-03-08 17:35:22.0
5 B15 555 2017-03-08 17:34:05.0
5 B15 777 2017-03-08 20:50:12.0
6 A21 123 2017-03-09 11:00:00.0
7 C11 123 2017-03-09 11:10:00.0
8 A21 123 2017-03-09 11:12:00.0
9 A21 555 2017-03-09 11:12:10.0
10 B15 123 2017-03-09 11:14:00.0
11 C11 555 2017-03-09 11:20:00.0
我想知道汽车通过雷达的路线 A21
以及 B15
在同一次旅行中。例如,如果同一个项目的日期不同 car_id
,那就不一样了。基本上,我想考虑雷达之间的最大时差 A21
以及 B15
对于同一辆车应该是30分钟。如果它更大,那么旅行就不一样了,比如
car_id 777
.
我的最终目标是计算每天的平均出行次数(不是唯一的,所以如果同一辆车经过同一条路线2次,那么应该计算2次)。
预期结果如下:
radar_start radar_end avg_tripscount_per_day
A21 B15 1.5
日期 2017-03-08
两个雷达之间有两个行程 A21
以及 B15
(汽车 777
由于30分钟的限制而不被考虑),而在 2017-03-09
只有一次旅行。平均每天2+1=1.5次。
我怎样才能得到这个结果?基本上,我不知道如何在查询中引入30分钟限制,以及如何按时间分组乘车 radar_start
以及 radar_end
.
谢谢。
更新:
旅行在开始之日登记。
如果车是被雷达触发的 A21
在 2017-03-08 23:55
通过雷达 B15
在 2017-03-09 00:15
,则应视为当日登记的同一行程 2017-03-08
.
万一 ids
6和8是同一辆车 123
路过 A21
两次,然后变成 B15
( id
10). 最后一次与 id
应考虑第8条。所以, 8-10
. 因此,最接近于 B15
. 解释是一辆汽车经过 A21
两次,第二次转到 B15
.
2条答案
按热度按时间aoyhnmkz1#
我错过了你用的
Hive
所以开始为SQL-Server
,但也许对你有帮助。尝试以下操作:查询
输出
样本数据
ijnw1ujt2#
附笔
如果您的版本不支持间隔,则最后的代码记录可以替换为-
and to_unix_timestamp(datetime) + 30*60 > to_unix_timestamp(next_datetime)