构建事件流
在上一个练习中,我们把日间水疗的数据拆分为入场和离场的事件流。对数据进行反透视后,下一步就是为整条事件流排序。
上一个练习的结果现已存放在名为 #StartStopPoints 的临时表中。该表的列包括 CustomerID、TimeUTC、EntryCount 和 StartOrdinal。这是您在本练习中需要使用的全部列。 TimeUTC 表示事件时间,EntryCount 表示该事件造成的净变化(+1 或 -1),StartOrdinal 仅在入场事件中出现,表示入场的先后顺序。
本练习是课程的一部分
SQL Server 中的时间序列分析
练习说明
- 使用合适的窗口函数(
ROW_NUMBER()),按时间顺序创建打卡入场与离场的事件流。 - 按客户 ID 分区,以便为每位用户分别计算结果。
- 按事件时间排序,并在出现并列时使用入场顺序值进行裁决。
交互式实操练习
通过完成这段示例代码来试试这个练习。
SELECT s.*,
-- Build a stream of all check-in and check-out events
___() OVER (
-- Break this out by customer ID
PARTITION BY s.___
-- Order by event time and then the start ordinal
-- value (in case of exact time matches)
ORDER BY s.___, s.___
) AS StartOrEndOrdinal
FROM #StartStopPoints s;