使用 SQL Server 2008+ 不知道如何提问,所以这里有一些示例数据:
case_id start_time timer_name type value duration
8386 2013-02-01 19:25:52 Patient In 25 1 NULL
8386 2013-02-01 20:18:31 Patient Out 25 0 NULL
8386 2013-02-01 20:13:13 Anes. Start 26 1 NULL
8386 2013-02-01 20:18:37 Anes. Stop 26 0 NULL
8386 2013-02-01 20:13:25 Induction 27 1 NULL
8386 2013-02-01 20:18:41 Emergence 27 0 NULL
8386 2013-02-01 20:13:31 Incision 28 1 NULL
8386 2013-02-01 20:18:45 Closing 28 0 NULL
8451 2013-02-06 18:37:44 Anesthesia 1 1 NULL
8451 2013-02-06 18:37:48 Incision 1 1 NULL
8451 2013-02-06 18:05:32 Patient In 25 1 NULL
8451 2013-02-06 18:07:41 Anes. Start 26 1 NULL
8451 2013-02-06 18:11:00 Induction 27 1 NULL
8451 2013-02-06 18:11:54 Emergence 27 0 NULL
8451 2013-02-06 18:11:20 Incision 28 1 NULL
这是我用来生成此列表的 SQL:
SELECT case_id, start_time, timer_name, type, value, duration
FROM dbo.event AS ev WITH (nolock)
WHERE (type IN (1, 2, 3, 25, 26, 27, 28)) AND (defunct = 'N')
ORDER BY case_id, type, start_time
我需要做的是将类型分组在一起,按 case_id、type 和 start_time 排序,然后计算第一个值为 1 的条目与下一个值为 0 的相同类型的条目之间的持续时间。上述数据中,案例8386应该有以下数据:
8386 2013-02-01 19:25:52 Patient In 25 1 52:39
8386 2013-02-01 20:13:13 Anes. Start 26 1 5:24
8386 2013-02-01 20:13:25 Induction 27 1 5:16
8386 2013-02-01 20:13:31 Incision 28 1 5:14
希望我做对了。持续时间不需要采用该格式。我希望秒数最好,但这种格式在问题中更容易阅读。在 timer_name 字段中显示什么名称也无关紧要。
了解我可能会在一行中为一个类型获得多个 1 值或在一行中获得多个 0 值。我需要将第一个 1 与第一个 0 联系起来并计算持续时间,然后寻找下一个 1,等等。这意味着每种类型可能有多个分组,每种情况。如果没有为 1 值找到 0 值,那么我将使用可以从另一个表中提取的 case_end_time。