gpt4 book ai didi

sql - 如何在各种事件序列中找到第一个开始时间?

转载 作者:行者123 更新时间:2023-12-01 13:48:00 25 4
gpt4 key购买 nike

我有以下列

VehicleId,StatusId,StartTime,评论

数据基本上是 VehicleIdStatusId 的一系列更改以及它们发生的时间和评论。每辆车在过去几年中都可以有一个 statusid 多次出现。数据跨越数年,但不是 50000 行的庞大数据集。我们只对每辆车的每次状态更改的日期时间感兴趣。所以这意味着我有很多车辆和 statusid 的组合以及按顺序看到的第一个开始日期。因此车辆在两个不同的序列中有一个 StatusId 我想要每个序列的最早日期,VehicleId 和那个 StatusId。我怎样才能得到它?

我创建了一个 sql fiddle here

我查看了 RANK() OVER (PARTITION BY [VehicleId],[StatusID] ORDER BY StartTime) AS [Group] 等,但它们似乎没有帮助

输入

VehicleId  | StatusId | StartTime
1 | 1 | 2010-1-1
1 | 1 | 2010-1-2
1 | 2 | 2010-1-3
1 | 2 | 2010-1-4
1 | 1 | 2010-1-5
2 | 1 | 2010-1-2

输出

VehicleId  | StatusId | FirstStartTime
1 | 1 | 2010-1-1
1 | 2 | 2010-1-3
1 | 1 | 2010-1-5
2 | 1 | 2010-1-2

所以我基本上需要减少输出行,使每个序列的开始都不会对行进行任何更改,除非它是 VehcileId 或 StatusId 的更改

最佳答案

您可以使用不同的行号方法来识别组。然后聚合得到你想要的:

select vehicleId, statusId, min(StartTime) as FirstStartTime
from (select se.*,
(row_number() over (partition by vehicleId order by StartTime) -
row_number() over (partition by vehicleId, StatusId order by StartTime)
) as grp
from StatusEvents se
) se
group by grp, statusId, vehicleId
order by vehicleId, FirstStartTime;

关于sql - 如何在各种事件序列中找到第一个开始时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34339979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com