我有一个带有名称和心跳日期时间的条目的sql表。在理想情况下,心跳每10分钟发生一次:
|Name|Heartbeat |
|A |20180907 09:10:00|
|A |20180907 09:20:00|
|A |20180907 09:30:00|
现在我还有更多人:
|Name|Heartbeat |
|A |20180907 09:10:00|
|B |20180907 09:15:00|
|A |20180907 09:20:00|
|B |20180907 09:25:00|
|A |20180907 09:30:00|
我甚至可以从另一个具有相同名称的人那里获得相同的名称。我只能通过他们的心跳来区分它们。
|Name|Heartbeat |
|A |20180907 09:10:00|
|A |20180907 09:15:00| --> Second A
|A |20180907 09:20:00|
|A |20180907 09:25:00| --> Second A
|A |20180907 09:30:00|
|A |20180907 09:35:00| --> Second A
|A |20180907 09:45:00| --> Second A
有时候,心脏会跳动一些跳动(有时持续几个小时)
|Name|Heartbeat |
|A |20180907 09:10:00|
|A |20180907 09:20:00|
|A |20180907 16:46:00|
|A |20180907 16:56:00|
|A |20180907 17:06:00|
最后但并非最不重要的一点:在正常情况下,心跳并不是每隔10分钟就发生一次,而是提前几秒钟(我没有看到过较晚的心跳,但我不排除这种情况):
|Name|Heartbeat |
|A |20180907 09:59:02|
|A |20180907 10:08:50|
|A |20180907 10:18:04|
|A |20180907 10:27:50|
我想要的:我想获取人物及其持续时间。 假设我有下表:
|Name|Heartbeat |
|A |20180907 09:59:02|
|B |20180907 10:05:50|
|A |20180907 10:08:50|
|B |20180907 10:15:20|
|A |20180907 10:18:04|
|A |20180907 10:27:50|
|B |20180907 13:00:50|
|B |20180907 13:03:42| --> second B
|B |20180907 13:10:10|
|B |20180907 13:12:56| --> second B
|C |20180907 13:15:30|
|B |20180907 13:19:46|
|C |20180907 13:25:01|
|C |20180907 13:34:53|
我想要得到以下结果:
|Name|Duration|StartTime|EndTime |
|A |00:28:48|09:59:02 |10:27:50|
|B |00:09:30|10:05:50 |10:15:20|
|B |00:18:56|13:00:50 |13:19:46|
|B |00:09:14|13:03:42 |13:12:56|
|C |00:19:23|13:15:30 |13:34:53|
使用T-SQL甚至可以实现(我不知道确切的SQL Server版本,但我想至少是SQL Server 2014)吗? 我什至没有起点。因此,如果有人给我一个正确方向的提示,我将非常感激。
我本以为游标会有所帮助,但我不知道如何以有用的方式应用它们。
答案 0 :(得分:0)
我只是建议这个主意。直接连接无法满足您的要求,原因是每次您都需要将当前条目与以前的值进行比较。您可以在此处执行的步骤是
内部loop1
内部循环2
例如以
开头|B |20180907 10:05:50|
在XYZ中添加以下条目
1D13EA00-58ED-4079-86AF-F103364D62CF |B |20180907 10:05:50|
下一步
|B |20180907 10:15:20|
注意: 我还没有介绍病人很多天都没有入场的情况。在这种情况下,您必须每10分钟创建一个偏移。 例如您只有这2个条目
|A |20180907 09:59:02|
|A |20180908 09:57:02|
在上述情况下,您必须抵消| 20180907 09:59:02 |的时间。 143次间隔10分钟。所以,您将进行比较
|A |20180908 09:49:02| //instead of |A |20180907 09:59:02|
与
|A |20180908 09:57:02|