postgresql 重叠整数时间间隔的postgres查询

rqdpfwrv  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(1)|浏览(118)

我有一个如下形式的postgres表

from_secs, to_secs, value
       10       20      1
       12       50      2
       
              ....

现在,在查询时,我得到一个时间间隔[(from_secs1, to_secs1), (from_secs2, to_secs2), ...]的列表,并且我需要得到(from_secs, to_secs)与列表中至少一个间隔重叠的所有值。
我该怎么做呢?

    • 示例:**

以上表为例,输入列表为[(1, 11), (55, 100)]
然后,查询应返回表的第一行,因为它是唯一与列表中至少一个间隔重叠的行

wlzqhblo

wlzqhblo1#

您可以使用从from_secs, to_secs组合构建的integer range,并将其与多范围进行比较。
然后使用overlaps operator

select *
from the_table
where int4range(from_secs, to_secs, '[]') && int4multirange(int4range(1, 11,'[]'), int4range(55, 100,'[]'));

范围在两边都创建为“包含”。

相关问题