【问题标题】:Simple query to detect date overlapping for optional date values用于检测可选日期值的日期重叠的简单查询
【发布时间】:2018-02-08 20:37:52
【问题描述】:

Determine Whether Two Date Ranges Overlap 非常简单。我的情况有点困难,但必须有一个简单的解决方案。

我有以下表格:

    CREATE TABLE catalog_version
    (
        id character varying(36) NOT NULL,
        name character varying(255),
        valid_from timestamp without time zone,
        valid_to timestamp without time zone,
    )

    CREATE TABLE catalog_article
    (
        id character varying(36) NOT NULL,
        code character varying(100),
        catalog_version_id character varying(36),
        valid_from timestamp without time zone,
        valid_to timestamp without time zone,
    )

以下限制:

  • 目录 1..1 - 0..n 目录版本。
  • 目录版本 1..1 - 0..n 目录文章。
  • valid_from 和 valid_to 对于两个版本和文章都是可选的。
  • 如果文章没有date_from,则版本开始时有效。
  • 如果文章没有 date_to,则在版本过期之前有效。
  • 不能有两篇具有相同代码的文章同时有效。
  • 该框架使用查询构建器,这意味着我不能使用任何数据库特定功能。

有没有一种方法可以简单地检测在给定时间是否已经存在有效文章,如果用户尝试定义新的目录文章?

例子:

----------------------------------------Version A---------------------------------------I
               I--Article ABC--I
                                               I--Article ABC--I





 Valid cases:
                                I-Article ABC-I
                                                               I-Article ABC-----------------
--Article ABC--I



 Invalid cases:
-----------------------------------------Article ABC-------I
                                    I----------Article ABC-----------------------------------

有没有人知道是否有办法简化这项任务?我手头唯一的解决方案是为每个可能的情况创建 AND 条件。

【问题讨论】:

  • 这是什么关系型数据库?如果是 Postgres,您可以使用 range functions 来检测范围重叠。然后它只是WHERE range1 && range2 而不是所有的 AND 业务。

标签: sql date datetime overlap


【解决方案1】:

这是我发现的,可以帮助我解决这个问题。拥有的第二条评论

 SELECT MAX(starttime), MIN(endtime) FROM #period HAVING MIN(endtime) >
 MAX(starttime);

这个答案属于另一个问题:

Overlapping dates

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多