2017-07-15 50 views
-1

讓我們假設一個如下表。構建所需的查詢包括:數據修復查詢

  • 那裏有比相同ID和同更多,記錄必須被刪除,只有一個記錄仍然在那裏。
  • 保留最早的effectiveDate的記錄並更新最近的記錄到期日期並且仍有待刪除。

輸入表

p.key | id | value | type | effectiveDate | expirationDate 
------------------------------------------------------------------ 
1 | 123 | ABC  | 1D | 2000-01-01  | 2010-01-01 
2 | 123 | ABC  | 1D | 1990-01-01  | 2010-01-01 
3 | 123 | ABC  | 1D | 2010-01-01  | 2020-01-01 
4 | 456 | ABC  | 1D | 2000-01-01  | 2010-01-01 

預期輸出

p.key | id | value | type | effectiveDate | expirationDate 
------------------------------------------------------------------ 
2 | 123 | ABC  | 1D | 1990-01-01  | 2020-01-01 
4 | 456 | ABC  | 1D | 2000-01-01  | 2010-01-01 
+0

這是一個非常簡單的聚合查詢。請閱讀「GROUP BY」查詢並進行嘗試。 – Parfait

回答

0

這是一個相當簡單的聚集。您需要使用group by子句和min()max()函數。

select 
    id 
    , value 
    , type 
    , min(effectiveDate) as effectiveDate 
    , max(expirationDate) as expirationDate 
from 
    my_table 
group by 
    id 
    , value 
    , type 

注:我從你的輸出取出key列,因爲它沒有意義的,有它在這裏。

+0

感謝您的快速回復..並且我想刪除剩餘的記錄 –

+0

@prabeenKumar沒有*剩餘*記錄要刪除。此查詢返回的結果與現有表中的任何內容不匹配。如果是我,我會將此查詢設置爲[view](https://dev.mysql.com/doc/refman/5.7/en/create-view.html),或者將結果保留在新表中定期獲取ETL。 – Jacobm001

+0

@prabeenKumar:你爲什麼刪除接受? – Jacobm001