我正在学习一些基本的SQL技能,我正在玩弄一些数据,看看我能做些什么,但是,我有点卡在如何继续处理我当前的问题。
我有一个表,看起来像这样:
<表类>
RouteID
SegmentID
为
BeginTime
EndTime
CarID
tbody><<tr>1 45 1 10:00:30 10:01:00 1 146 2 10:01:00 10:01:30 1 147 3 10:01:30 10:02:00 1 250 1 10:05:00 10:05:30 1 249 2 10:06:00 10:06:30 1 3 900 1 20:01:00 20:01:30 2 表类>
您可以比较已排序的行来标记汽车的新路线起点。然后在一辆车里得到一个虚拟的路线号码。例如
select routeID, SegmentID, [Order], BeginTime, EndTime, CarID,
-- virtual route nbr within a car
sum(newRouteFlag) over(partition by CarID order by BeginTime) rtNmbr
from (
select routeID, SegmentID, [Order], BeginTime, EndTime, CarID,
case when lag(routeID) over(partition by CarID order by BeginTime) = routeID
or dateadd(minute, 5, lag(BeginTime) over(partition by CarID order by BeginTime)) >= BeginTime then 0 else 1 end newRouteFlag
from tbl
) t