Oracle SQL - 如何从数据库 return 公共日期期间(基于 start/end 日期)

Oracle SQL - How to return common date period from database (based on start/end dates)

我正在努力解决 return 特定 Limit_ID 的开始和结束日期的通用期间。 我的 table 看起来像这样:

Code Start_Date End_Date Limit_ID
912 08/01/2022 14/01/2022 44
905 10/01/2022 12/01/2022 44
904 06/01/2022 09/01/2022 NULL
410 09/01/2022 20/01/2022 44

基本查询如下所示,它有效,但仅当时间段有公共部分时才有效。

SELECT o.limit_id
      ,MAX(start_date) date_from
      ,MIN(end_date)   date_to
  FROM table1 e
  JOIN table2 o
    ON e.code= o.code
 WHERE o.limit_id = 44
 GROUP BY e.limit_id

为了更容易理解,目前它看起来像这样(我得到正确的时期:10/01 - 12/01)

但是当代码 904 将包含 Limit_ID = 44 时,它无法正常工作。然后我将期望查询到 return 0 行(因为没有公共句点)。所以我的问题是 - 是否有一种很好的方法来 return 只有在日期范围具有共同周期的情况下才能得到结果?

谢谢

您应该检查 max(start_date) 是否低于 min(end_date)

SELECT o.limit_id
  ,MAX(start_date) date_from
  ,MIN(end_date)   date_to
  FROM table1 e
  JOIN table2 o
    ON e.code= o.code
 WHERE o.limit_id = 44
 GROUP BY e.limit_id
 HAVING MAX(start_date)<MIN(end_date)