【问题标题】:oracle query to remove duplicate rows based on conditionoracle查询根据条件删除重复行
【发布时间】:2015-08-09 08:51:42
【问题描述】:

我有下表所示的数据。

+------+----------+----------+
| 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 |
+------+----------+----------+    

对于特定类型,

  1. 如果 date1 存在对应的 date2,则选择该行并删除其他 date1
  2. 如果对应的 date2 不存在,则保留它

同样,

  1. 如果 date2 存在对应的 date1,则选择该行并删除其他 date2
  2. 如果对应的 date1 不存在,则保留它

是否可以为此编写一个 oracle 查询? 谁能帮我做这件事?

【问题讨论】:

    标签: sql oracle join


    【解决方案1】:

    试试这个查询:

    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
       )  
    

    演示:http://sqlfiddle.com/#!4/12b8b/8

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 2020-02-17
      • 2021-04-02
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2019-04-19
      • 1970-01-01
      相关资源
      最近更新 更多