[英]Find duplicates by date interval
I have the first 3 columns in the below table and I would like to obtaing the 4th one (CLASHING).我有下表中的前 3 列,我想获得第 4 列(冲突)。 If, over partition by account, the period between start and end dates is clashing, I would like to mark it as 'X'.
如果按帐户进行分区,开始日期和结束日期之间的时间段发生冲突,我想将其标记为“X”。
ACCOUNT START END CLASHING
----------------------------------------
1 30-Sep-21 28-Oct-21 NO
1 01-Jul-21 20-Aug-21 NO
2 30-Jul-21 28-Oct-21 YES
2 01-Jul-21 20-Aug-21 YES
You can use:您可以使用:
SELECT t.*,
CASE
WHEN EXISTS(SELECT 1
FROM table_name x
WHERE x."START" < t."END"
AND x."END" > t."START"
AND x.account = t.account
AND x.ROWID != t.ROWID)
THEN 'YES'
ELSE 'NO'
END AS clashing
FROM table_name t
Which, for the sample data:其中,对于样本数据:
CREATE TABLE table_name (ACCOUNT, "START", "END") AS
SELECT 1, DATE '2021-09-30', DATE '2021-10-28' FROM DUAL UNION ALL
SELECT 1, DATE '2021-07-21', DATE '2021-08-20' FROM DUAL UNION ALL
SELECT 2, DATE '2021-07-30', DATE '2021-10-28' FROM DUAL UNION ALL
SELECT 2, DATE '2021-07-01', DATE '2021-08-20' FROM DUAL;
Outputs:输出:
ACCOUNT 帐户
START 开始
END 结尾
CLASHING 冲突
1 1
30-SEP-21 30-SEP-21
28-OCT-21 21 年 10 月 28 日
NO 不
1 1
21-JUL-21 21 年 7 月 21 日
20-AUG-21 20-8-21
NO 不
2 2
30-JUL-21 21 年 7 月 30 日
28-OCT-21 21 年 10 月 28 日
YES 是的
2 2
01-JUL-21 01-JUL-21
20-AUG-21 20-8-21
YES 是的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.