如何在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分 如何写