查询以查找同一人同时执行的任务

时间:2019-01-05 11:18:18

标签: sql postgresql

我有一个包含4列的表,ID,名称,开始时间,结束时间。 [Table1]

我需要为每个程序查找麻醉师同时执行的程序数量。

输出应为Proc_id,其中包含并发过程数。 这类似于预期的输出。

enter image description here

我该如何查询?

1 个答案:

答案 0 :(得分:1)

使用类似的东西构造从开始时间到结束时间的范围

tsrange (start_time, end_time, '[]')  (for exclusive range boundaries)
tsrange (start_time, end_time, '()')  (for inclusive range boundaries)

https://www.postgresql.org/docs/9.3/rangetypes.html

使用重叠运算符“ &&”测试2个范围

https://www.postgresql.org/docs/9.3/functions-range.html

将其包装在看起来像这样的查询中

SELECT p1.proc_id,
( SELECT COUNT(*) 
FROM procedure p2 
WHERE p1.anest_name = p2.anest_name 
  AND p1.proc_id <> p2.proc_id
  AND tsrange (p1.start_time, p1.end_time, '()') && tsrange (p2.start_time, p2.end_time,'()')
) as count 
FROM procedure p1
ORDER BY p1.proc_id

您使用哪种范围边界取决于您对“同时”的理解。这可能意味着重叠,被另一个时间框架或其他内容所包含。您可能想弄乱边界,但是该查询应该匹配您的估计结果(或至少接近它们)...