2015-08-09 90 views
3

我有類似下表的數據。oracle查詢根據條件刪除重複行

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

用於particaular類型,

  1. 如果相應的日期2存在對DATE1,然後選擇該行並刪除其他日期1
  2. 如果相應的日期2不存在,則保留它

同樣,

  • 如果相應DATE1存在對DATE2,然後選擇該行,並刪除其它DATE2
  • 如果相應的日期1不存在,那麼保持它
  • 是否有可能爲此編寫oracle查詢? 任何人都可以幫助我做到這一點?

    回答

    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