问题描述
我尝试使用具有最小和最大逻辑的行号。但如果车辆第二次访问同一位置,则失败。
解决方法
这是一个空白问题,您希望将具有相同车辆和位置的相邻行分组在一起。
这是一种利用行号之间的差异来识别孤岛的方法:
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)