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)
我正在努力解决 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)