Sql 根据条件删除重复行的oracle查询

Sql 根据条件删除重复行的oracle查询,sql,oracle,join,Sql,Oracle,Join,我有如下表所示的数据 +------+----------+----------+ | type | date1 | date2 | +------+----------+----------+ | IT1 | 05/01/15 | 08/01/15 | | IT1 | 05/01/15 | | | IT1 | 04/01/15 | | | IT1 | | 03/02/15 | | IT1 | 06/01/15 | 03

我有如下表所示的数据

+------+----------+----------+
| type |  date1   |  date2   |
+------+----------+----------+
| IT1  | 05/01/15 | 08/01/15 |
| IT1  | 05/01/15 |          |
| IT1  | 04/01/15 |          |
| IT1  |          | 03/02/15 |
| IT1  | 06/01/15 | 03/02/15 |
| IT1  |          | 04/02/15 |
| IT2  | 05/01/15 |          |
| IT2  | 05/01/15 | 04/01/15 |
| IT2  | 03/01/15 |          |
| IT2  |          | 09/01/15 |
+------+----------+----------+
我需要通过删除重复项来获取行,结果如下

+------+----------+----------+
| type |  date1   |  date2   |
+------+----------+----------+
| IT1  | 05/01/15 | 08/01/15 |
| IT1  | 04/01/15 |          |
| IT1  | 06/01/15 | 03/02/15 |
| IT1  |          | 04/02/15 |
| IT2  | 05/01/15 | 04/01/15 |
| IT2  | 03/01/15 |          |
| IT2  |          | 09/01/15 |
+------+----------+----------+    
对于特殊类型

  • 如果date1存在对应的date2,则选择该行并删除其他date1
  • 如果对应的日期2不存在,则保留该日期
  • 同样地

  • 如果date2存在对应的date1,则选择该行并删除其他date2
  • 如果对应的date1不存在,则保留它
  • 是否可以为此编写oracle查询? 有人能帮我做这个吗?

    试试这个查询:

    select *
    from table1 t1
    WHERE
      "date2" IS NOT NULL
      AND
      "date1" IS NOT NULL
      OR
      "date2" IS NULL 
      AND NOT EXISTS (
        SELECT 1 FROM table1 t2
        WHERE t1."type" = t2."type"
          AND t1."date1" = t2."date1"
          AND t2."date2" IS NOT NULL
       )
       OR
      "date1" IS NULL 
      AND NOT EXISTS(
        SELECT 1 FROM table1 t2
        WHERE t1."type" = t2."type"
          AND t1."date2" = t2."date2"
          AND t2."date1" IS NOT NULL
       )  
    
    演示: