2017-07-15 25 views
-1

以下のような表を想定します。構築するために必要なクエリが含まれています:同じIDと同じタイプ持つよりも多いデータ修復クエリ

  • は、レコードが1つのレコードだけが残っている場所に削除する必要があります。
  • 有効期限のレコードを最新の有効期限で更新し、削除されたままにしておきます。

入力テーブル

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

関連する問題