SQL时间跟踪查询
数据:
EmpNumber, TimeStamp, AreaName 10632, 2009-11-23 16:40:33.000, OUT_1 10632, 2009-11-23 16:39:03.000, IN_1 10632, 2009-11-23 16:38:56.000, IN_1 10632, 2009-11-23 15:31:51.000, OUT_1 10632, 2009-11-23 15:31:48.000, IN_1 10632, 2009-11-23 15:31:43.000, IN_1 10632, 2009-11-23 15:31:14.000, OUT_1 10632, 2009-11-23 15:31:08.000, IN_1 10632, 2009-11-23 15:29:18.000, OUT_1 10632, 2009-11-23 15:28:29.000, IN_1 10632, 2009-11-23 15:27:35.000, OUT_1 10632, 2009-11-23 15:26:35.000, IN_1 10632, 2009-11-23 15:22:55.000, IN_1
这是我当前正在使用的查询。
SELECT [EmpNumber], [TimeStamp], [AreaName],
DATEDIFF(second, [TimeStamp], (SELECT TOP 1 [TimeStamp]
FROM [EventTable] EV2
WHERE EV2.[TimeStamp] > EV1.[TimeStamp]
AND AreaName = 'OUT_1'
AND EV2.[EmpNumber] = EV1.[EmpNumber])
)/60.00 DurationMins
FROM [EventTable] EV1
WHERE AreaName = 'IN_1'
ORDER BY [TimeStamp] DESC
问题出在多个 IN_1
条目上。我只想跟踪第一个 IN_1
条目和后续 OUT_1
条目之间的时间差,并忽略其间的 IN_1
条目。当然,您可以有 100 个 IN_1
,但仅跟踪从第一个 IN_1
到下一个 OUT_1
的时间。
更复杂的是,可能还有 IN_1
、IN_2
、IN_3
、OUT_1
、OUT_2
code>、OUT_3
,您可以输入 IN_1
并离开 OUT_3
,它会像 IN_1
一样工作,OUT_1
。
Data:
EmpNumber, TimeStamp, AreaName 10632, 2009-11-23 16:40:33.000, OUT_1 10632, 2009-11-23 16:39:03.000, IN_1 10632, 2009-11-23 16:38:56.000, IN_1 10632, 2009-11-23 15:31:51.000, OUT_1 10632, 2009-11-23 15:31:48.000, IN_1 10632, 2009-11-23 15:31:43.000, IN_1 10632, 2009-11-23 15:31:14.000, OUT_1 10632, 2009-11-23 15:31:08.000, IN_1 10632, 2009-11-23 15:29:18.000, OUT_1 10632, 2009-11-23 15:28:29.000, IN_1 10632, 2009-11-23 15:27:35.000, OUT_1 10632, 2009-11-23 15:26:35.000, IN_1 10632, 2009-11-23 15:22:55.000, IN_1
Here is the query I am currently using.
SELECT [EmpNumber], [TimeStamp], [AreaName],
DATEDIFF(second, [TimeStamp], (SELECT TOP 1 [TimeStamp]
FROM [EventTable] EV2
WHERE EV2.[TimeStamp] > EV1.[TimeStamp]
AND AreaName = 'OUT_1'
AND EV2.[EmpNumber] = EV1.[EmpNumber])
)/60.00 DurationMins
FROM [EventTable] EV1
WHERE AreaName = 'IN_1'
ORDER BY [TimeStamp] DESC
The problem is on the multiple IN_1
entries. I would only like to track the time difference between the first IN_1
Entry, and the Following OUT_1
Entry and Ignore the IN_1
entry in between. Of course you could have 100 IN_1
but the time is only tracked from the first IN_1
to the next OUT_1
.
To complicate things further there could be an IN_1
, IN_2
, IN_3
, OUT_1
, OUT_2
, OUT_3
and you could enter IN_1
and Leave OUT_3
and and it would work just as it was IN_1
, OUT_1
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
已解决
给出以下结果:
如果 IN_ 和 OUT_ 这将适用于所有类型
Solved
Gives these results:
This will work for all types if IN_ and OUT_
Nick,不同的门不是问题,而不是使用
= 'IN_1'
和= 'OUT_1'
使用like 'IN%'
和 <代码>如“OUT%”Nick, the different doors are not an issue instead of using
= 'IN_1'
and= 'OUT_1'
uselike 'IN%'
andlike 'OUT%'
CTE 将在 SQL Server 2005、2008 上运行。测试数据插入特定于 2008 年。
CTEs will work on SQL server 2005, 2008. The test data insert is 2008 specific.