2016-06-15 7 views
-4

私はかなり標準的なリクエストを持っています。私はデータ(約8000行)の束を持っているMySQLテーブルがあります。残念ながら、この表には多くの重複行が含まれています。これらの行には、id,first_name,last_namelast_modifiedなどのデータが含まれています。日付が最新の日付でない行を削除する

「重複」行のすべてに同じfirst_namelast_nameが含まれていますが、 idlast_modifiedの日付はすべて異なっています。

幸いなことに、最後に修正された日付は、重複している行が実際に正しいものであることをどのように伝えることができるかということです。

つまり、特定のfirst_namelast_nameを指定したすべての行を削除したい場合は、last_modifiedの日付が最新のものではありません。例えば

、私はこのように見えるいくつかの行を持っている場合:

1  Bob Smith   2015-04-19 
2  Bob Smith   2016-04-19 
3  Bob Smith   2014-04-19 
4  Richard McDonald 2008-04-19 
5  Joe Blo    2011-04-19 
6  Jo Blo    2010-04-19 

注:年間は保管しなければならない最も最近の年と一人一人だけの行のように異なっています。

最新の(最新の)日付である姓と名が与えられた行のみを保持するクエリが必要です。だから私が望むクエリを実行した場合、行は次のようになります:

2  Bob Smith   2016-04-19 
4  Richard McDonald 2008-04-19 
5  Joe Blo    2011-04-19 

誰でも私にこれを達成できる一般的なクエリを書くことができますか?ありがとうございます。

+2

ジョーBLO <>ジョー・BLO – AgRizzo

答えて

1

あなたがdeletejoinでこれを行うことができます。

delete t 
    from t join 
     (select first_name, last_name, max(last_modified) as maxlm 
      from t 
      group by first_name, last_name 
     ) tt 
     on t.first_name = tt.first_name and t.last_name = tt.last_name and 
      t.last_modified < tt.maxlm; 
関連する問題