如何在sql中的某个位置连续计算车辆的时间

Posted

技术标签:

【中文标题】如何在sql中的某个位置连续计算车辆的时间【英文标题】:How to calculate the time of a vehicle continuously at a location in sql 【发布时间】:2020-11-02 12:11:09 【问题描述】:

我尝试过使用最小和最大逻辑的行号。但如果车辆第二次访问同一位置,它就会失败。

【问题讨论】:

【参考方案1】:

这是一个间隙和孤岛问题,您希望将具有相同车辆和位置的相邻行组合在一起。

这是一种使用行号之间的差异来识别岛屿的方法:

select vehicle_no, location, min(time) starttime, max(time) endtime,
    max(time) - min(time) timediff
from (
    select t.*, 
        row_number() over(partition by vehicle_no order by time) rn1,
        row_number() over(partition by vehicle_no, location order by time) rn2
    from mytable t
) t
group by vehicle_no, location, rn1 - rn2

【讨论】:

【参考方案2】:

这是一个孤岛问题。在这种情况下,您可以使用row_number()s 的差异来识别“岛屿”:

select vehicle_no, location, min(time), max(time),
       max(time) - min(time) as at_location
from (select t.*,
             row_number() over (partition by vehicle_no order by time) as seqnum,
             row_number() over (partition by vehicle_no, location order by time) as seqnum_2
      from t
     ) t
group by vehicle_no, location, (seqnum - seqnum_2)

【讨论】:

以上是关于如何在sql中的某个位置连续计算车辆的时间的主要内容,如果未能解决你的问题,请参考以下文章

如何连续计算位置更新之间的距离以获得总距离

sql语句 在一定的时间范围内 连续3天考试都满足 60分 如何写

如何在 Dart 中获得车辆的速度 [重复]

车辆跟踪设备中无源晶体的皮尔斯晶振电路匹配电容是如何计算的?

保持车辆连续定位的最佳方法

SQL查询如何判断要查找的字符是不是在一个指定集合中