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

问题描述

enter image description here

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

解决方法

这是一个空白问题,您希望将具有相同车辆和位置的相邻行分组在一起。

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

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,rn1 - rn2
,

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

select vehicle_no,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,(seqnum - seqnum_2)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...