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