我有两张table:availability
和blocked_availability
。
可用性:
| 日|启动|结束|
| --------------|--------------|--------------|
| 1|九点整|十一点整|
| 1|十二点整|16点整|
阻塞可用性
| 日|启动|结束|
| --------------|--------------|--------------|
| 1|九点半|十点半|
| 1|十二点半|14点半|
从这两个表结合起来,我想看看是否有一个至少X分钟的可用性时期。
在以上示例中,存在一些可用时隙:
上午九时至九时三十分
10:30 - 11:00
12:00 - 12:30
14:30 - 16:00
是否有一个查询,以查看是否有至少60分钟的可用时隙(本例中只有1个)。
2条答案
按热度按时间ni65a41a1#
您可以使用递归
cte
从可用性列表中构建时隙间隔,然后将阻塞的可用性left join
到cte
。然后,可以对在被阻止的可用性中不具有匹配的行执行排名(因此它是可用的),并且可以对排名值进行分组以找到每个间隔的总分钟数:See fiddle
xxe27gdn2#
从两个表中取消透视值(这里使用union all完成),然后使用lead()。这将从表中生成所有可能的期间。现在,您可以连接原始数据,过滤“阻塞”时段并计算时间差。
dbfiddle demo