我正在使用具有事件列的时间序列数据。事件列中的“ s”表示事件的开始,而“ S”表示结束。
某些记录可能不在s和S范围内,而我不感兴趣。
我需要将这些记录分为编号的事件。本质上,我需要捕获s和S之间的第一组记录,并将它们标记为事件1,下一组标记为事件2,等等。
我正在尝试在My SQL中执行此操作,却想不出执行此操作的最佳方法。
SET @trip_num = 0;
SET @id = '';
SELECT
*,
@trip_num := CASE WHEN @id = vid THEN
CASE WHEN event = binary 's' THEN @trip_num + 1 ELSE @trip_num END
ELSE
CASE WHEN reason = binary 's' THEN 1 ELSE 0 END
END AS 'trip_id',
@id := vid
FROM table
ORDER BY vid, datestamp;
到目前为止,这是我的操作方式,但是问题是,在“ S”之后且在“ s”之前的记录将被视为事件的一部分。
有什么想法吗?
如果记录的时间戳比行程中的“ S”事件晚,我可以添加标志并过滤掉它们。