表结构如下所示:
+-------------------------+---------------+--------------------------------------+---------+
| timestamp | event_type | user_id | label |
+-------------------------+---------------+--------------------------------------+---------+
| 2016-06-11 16:22:06.384 | SearchResults | 9df64989-9b1a-4bee-a69a-381092573185 | 4 |
| 2016-06-11 16:22:06.402 | SeeMore | 9df64989-9b1a-4bee-a69a-381092573185 | KS31494 |
| 2016-06-11 16:22:06.708 | ServerSearch | 152ef390-8e62-498a-b861-6586febe6f83 | 19969 |
| 2016-06-11 16:22:06.83 | ServerSearch | 9a3706ca-da63-451b-b54c-35adbb52ad96 | 184 |
| 2016-06-11 16:22:06.912 | ServerSearch | ab0aceba-f4f1-45df-9799-61b307290764 | 6332 |
| 2016-06-11 16:22:07.01 | DebtReminder | 60dc13b1-ade5-43aa-82e9-37c544dc6c5d | red |
+-------------------------+---------------+--------------------------------------+---------+
此表中的label
值仅在 SeeMore 事件的情况下有意义并且表示车辆ID,否则对于给定方案而言毫无意义。
我们对每个车辆ID的所有 SeeMore 事件的总持续时间感兴趣 - 有意义的label
。
单独的 SeeMore evebt的持续时间被指定为 SeeMore user_id
与任何后续事件之间特定event_type
的时差。< / p>
如何为所有车载ID(有意义的label
s)找到所有 SeeMore 事件的总持续时间?
答案 0 :(得分:1)
试试这个:
select user_id,timestamp,next_timestamp-timestamp as time_diff
from
(
select
timestamp,
user_id,
case when event_type='SeeMore' then 1 else 0 end as SM,
lead(timestamp) over (partition by user_id order by timestamp) as next_timestamp
from event_table
)
where SM=1