首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle -删除重叠记录

Oracle -删除重叠记录
EN

Stack Overflow用户
提问于 2016-08-08 14:10:39
回答 1查看 58关注 0票数 0

由于使用数据填充表时出错,表中现在出现了错误记录。特别是有重叠的时间戳。现在,我要删除这些记录,这些记录具有如下示例中所示的特征:

代码语言:javascript
复制
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('1','3',to_timestamp('27.05.2016 17:27:08','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('31.05.2016 18:34:16','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('2','3',to_timestamp('31.05.2016 18:34:16','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('31.05.2016 18:34:26','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('3','3',to_timestamp('31.05.2016 18:34:26','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('01.06.2016 08:56:51','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('4','3',to_timestamp('01.06.2016 08:56:51','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('01.06.2016 18:38:30','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('5','3',to_timestamp('01.06.2016 18:38:30','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('08.06.2016 15:23:22','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('6','3',to_timestamp('08.06.2016 15:23:22','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('08.06.2016 21:02:21','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('7','3',to_timestamp('08.06.2016 17:09:02','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('08.06.2016 19:04:05','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('8','3',to_timestamp('08.06.2016 19:04:05','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('08.06.2016 21:02:21','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('9','3',to_timestamp('08.06.2016 21:02:21','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('09.09.9999 00:00:00','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('10','6',to_timestamp('20.06.2016 21:23:48','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('20.06.2016 21:23:56','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('11','6',to_timestamp('20.06.2016 21:23:56','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('21.06.2016 08:59:16','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('12','6',to_timestamp('21.06.2016 08:22:35','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('21.06.2016 08:23:02','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('13','6',to_timestamp('21.06.2016 08:23:02','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('21.06.2016 08:59:16','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('14','6',to_timestamp('21.06.2016 08:59:16','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('21.06.2016 12:06:49','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('15','6',to_timestamp('21.06.2016 12:06:49','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('22.06.2016 06:29:51','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('16','6',to_timestamp('22.06.2016 06:29:51','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('22.06.2016 08:18:18','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('17','6',to_timestamp('22.06.2016 08:18:18','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('22.06.2016 08:24:58','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('18','6',to_timestamp('22.06.2016 08:24:58','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('22.06.2016 08:38:18','DD.MM.RR HH24:MI:SSXFF'));
Insert into TEST_OVERLAP (TICKET_SK,TICKET_ID,VALID_FROM,VALID_TO) values ('19','6',to_timestamp('22.06.2016 08:38:18','DD.MM.RR HH24:MI:SSXFF'),to_timestamp('09.09.9999 00:00:00','DD.MM.RR HH24:MI:SSXFF'));

要删除的记录数量也可能大于每个ticket_id的2条。

这是怎么做到的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-08 14:25:31

如果我正确理解,您希望删除所有具有相同ticket_id记录和完全包含该记录的时间框架的记录。

下面是一个执行此任务的查询:

代码语言:javascript
复制
DELETE tickets t
WHERE EXISTS (
    SELECT *
    FROM tickets t2
    WHERE t2.ticket_id  =  t.ticket_id
      AND t2.valid_from <  t.valid_from
      AND t2.valid_to   >= t.valid_to
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38831487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档