【发布时间】:2014-07-01 05:58:09
【问题描述】:
我正在尝试计算信息亭机器上事件之间的时间差(以秒为单位)。每次有人开始使用屏幕时,它都会创建一个 VisitID。在那次访问中,创建了一系列计算机事件,这些事件决定了屏幕的开始和屏幕的结束我已经确定了每个屏幕的每个事件。根据用户做出的选择,他们可能会或可能不会经历每个事件或屏幕。我的数据如下所示:
VisitID ScreenTime EventName
1 13:24:08 WelcomeScreen_Begin
1 13:24:15 Welcome_End
1 13:24:15 NameScreenInit_Start
1 13:24:32 Name_Screen_Terminate
1 13:24:33 CompanyScreen_Enter
1 13:24:45 Company_Lookup
1 13:24:45 Signoff_Now
1 13:24:52 SignOutEnd
2 13:45:02 WelcomeScreen_Begin
2 13:45:15 Welcome_End
2 13:45:15 NameScreenInit_Start
2 13:45:40 Name_Screen_Terminate
2 13:45:40 Signoff_Now
2 13:45:58 SignOutEnd
我希望我的结果如下所示:
VisitID WelcomeScreen NameScreen CompanyScreen SignoffScreen
1 00:00:7 00:00:17 00:00:12 00:00:07
2 00:00:13 00:00:25 NULL 00:00:18
最后,我想计算在每个屏幕上花费的平均时间:
WelcomeScreenAVG NameScreenAVG CompanyScreenAVG SignoffScreenAVG
00:00:10 00:00:21 00:00:12 00:00:13
我已经能够使用下标来获取 DATEDIFF 子句中的每个时间戳,但只有在 WHERE 子句中包含 VisitID 时它才有效。我有成千上万的条目,所以这不是这样做的方法。这几天我一直在绞尽脑汁。有没有人有解决方案,或者至少知道我应该做什么?提前致谢!
在少数情况下,唯一可用于表示一个屏幕开始的事件与结束前一个屏幕的事件相同。例如:
VisitID ScreenTime EventName
34 08:34:36 Delivery_summaryConfirm
34 08:34:47 Seal_questionsBegin
34 08:35:17 EndSeal_Inquiry
^^这是 2 个屏幕^^ 在上面的示例中,虽然 Seal_questionsBegin 是 SealInquiry 屏幕的开始,但它是唯一能够表示 DeliverySummary 屏幕结束的事件。这是因为 DeliverySummary 屏幕后面总是跟着一个 SealInquiry 屏幕。
【问题讨论】:
-
事件是稳定的少数还是一长串变量字符串?在第二种情况下,您可能需要一个动态枢轴
标签: sql-server