2017-08-17 13 views
-1

私は約200の異なるIDのテーブルを持っています。各IDには、異なるタイムスタンプで約100倍のデータが記録されます。私は、各IDごとに、その特定のIDの最年少レコードより2日古いレコードを別々に削除したいと考えています。 別名、IDごとに少なくとも2日間のリストが必要です。いくつかはCURRENTDATEまで、他のリストは先月から2日までです。レコードを削除する各IDの最新レコードより2日古い

この作品?:

> DELETE FROM loggingTable WHERE (DATE_SUB(MAX(T_log),INTERVAL 48 HOUR)> T_log) GROUP BY ID 

は、私は私のデータを削除したくない....

+2

_ "自分のデータを削除したくありません...." _ _次に、_copy_を作成し、そのことをテストします。 – CBroe

+0

@CBroe。私は、多くのデータを削除したいとは思っていませんでした。 – drB

+0

次に、検証できるように注意深いテスト条件を作成します。それが間違っている場合は、テスト環境のデータを元の状態(バックアップを作成したもの)に戻してもう一度やり直してください。これはユニットテストと呼ばれ、コーディングのナットとボルトの一部です。はい、経験があれば、コードを見るだけで特定のコードが動作することが事前に分かるかもしれませんが、通常このスキルは多くのテストや試行錯誤を経ています。とにかく、あなたのデータを見ることができないので、質問がうまくいくかどうかを知ることは難しいです。 – ADyson

答えて

0

あなたが誤ってデータを削除したくない場合は、この問題にアプローチWOULD以下の方法(最悪から最善まで):

  1. データのコピーを作成し、それを処理します。
  2. トランザクションを操作してください。

    START TRANSACTION; 
    DELETE ...; 
    SELECT ...; /* check if everything worked as expected*/ 
    /*if yes...*/ 
    COMMIT; /* this writes your changes on disk */ 
    /*if not, don't do a commit, but instead...*/ 
    ROLLBACK; /* this undoes all the statements in the transaction */ 
    
  3. が最初SELECTステートメントとしてごDELETE文を書くようにこれが働くだろう。次に、何が削除されるかを確認します。それが問題なければ、DELETEステートメントに変換してください(そして、このアプローチを上記のポイント2と組み合わせてください)。次のような例:

    SELECT 
    * 
    FROM loggingTable lt 
    JOIN (SELECT ID, MAX(T_log)AS max_log FROM loggingTable GROUP BY ID) AS m ON lt.ID = m.ID 
    WHERE lt.T_log < m.max_log - INTERVAL 2 DAY; 
    

    それは大丈夫に見える場合:もちろん

    DELETE lt.* 
    FROM loggingTable lt 
    JOIN (SELECT ID, MAX(T_log)AS max_log FROM loggingTable GROUP BY ID) AS m ON lt.ID = m.ID 
    WHERE lt.T_log < m.max_log - INTERVAL 2 DAY; 
    

をあなたは組み合わせることができます2、3 1と同様;-)

いくつかの追加に近づきます説明:私がテーブルにクエリを結合した理由は、WHERE句に集計関数(MAX()など)を使用できないためです。 where句が前に評価されているので

を選択

  • BY
  • ORDERを備えた
  • BY GROUP
  • FROM

    1. :SQL文は次のように評価され、 group by句では、集計にアクセスできませんテがそこで機能する。それらはgroup by句で導入されています。

  • +0

    ありがとう、私は今理解しています。lt.T_logは元のテーブルを指していますが、m.max_logはJOINを指しています。 IDでグループ化されています。それが私が探していたものです。 – drB

    関連する問題