PostgreSQL:如何在双方的两个日期之间进行联接?

时间:2018-11-07 21:21:20

标签: sql postgresql datetime join

我有一些要合并的移位和中断数据。下面是它的样子:

enter image description here

您可以看到我有一组班次和一组休息时间。我想加入worker的两个表,其中工位开始和结束时间介于开始和结束班次之间。因此,最终结果将如下所示: enter image description here

您可以看到,在此内部联接中,不符合条件的中断之一被排除在结果之外。请原谅这些是图片而不是代码,因为我目前没有复制能力。

我知道通常的情况:

SELECT 
*
FROM
shifts inner JOIN breaks ON
BREAKS.worker = shifts.worker AND
breaks.break_start between shifts.shift_start AND shifts.end_shift;

但是我不确定如何在break_end列中使用该公式。谢谢。

1 个答案:

答案 0 :(得分:0)

range data types及其“包含”运算符应很好地解决此问题:

tstzrange(shifts.shift_start, shifts.end_shift)
   @> tstzrange(breaks.break_start, breaks.break_end)