2017-02-18 9 views
0

前の行に一致する次の行または列の値を削除するにはどうすればよいですか? 2つの列からMySQLテーブルベースの行または列の値。MySQLの2列の前の行の値と一致するNEXT行の値を削除する方法

したがって、次の行/列の値/結果に前の行/列の値/結果と同じ値が含まれている場合は削除されますが、次の列が前の列の値/ resultその行は削除しないでください。その条件に適切なクエリは何でしょうか?

私はデータを確認するために選択クエリをまず作成しようとしています。これは選択クエリです。選択のための私の質問は正しいですか?

SELECT current_row.row, current_row.id, current_row.column1, 
     current_row.column2, previous_row.row, previous_row.id, 
     previous_row.column1, previous_row.column2 
FROM 
    (SELECT @rownum:[email protected]+1 row, a.*  
    FROM MyTable a, (SELECT @rownum:=0) r 
    ORDER BY unix_time, id 
    ) as current_row 

LEFT JOIN 
    (SELECT @rownum2:[email protected]+1 row, a.*  
    FROM MyTable a, (SELECT @rownum2:=0) r 
    ORDER BY unix_time, id) as previous_row 

ON (current_row.id = previous_row.id) 
AND (current_row.column1 = previous_row.column1) 
AND (current_row.column2 = previous_row.column2) 
AND (current_row.row = previous_row.row - 1) 
LIMIT 10; 

ご協力いただきありがとうございます。

乾杯!

+0

穴がありますか'mytable'の' id'を削除しましたか?このクエリを何度も何度も再利用しようとしますか? – MohaMad

+0

@MohaMad - はい、基本的にこのクエリは、cronジョブで実行するか、基本的にbashで実行する必要があります。しかし、私は本当に知っている必要があります、どのように私は基本的に削除を行うことができます。 –

+0

@MohaMad - そして、ところで、NOはその時点でIDを削除しました。 –

答えて

0

我々はそうON句がt1.myid=t2.myid+1WHERE句である必要があり、比較のために割り当てられた新しい仮想idselectデータにしようとしているが、col1col2行フィルタリングする必要があります

SET @id1:=0 , @id2:=0 ; 
SELECT * FROM (
     (SELECT *, @id1:[email protected]+1 as myid from mytable) as t1 
LEFT JOIN 
     (SELECT *, @id2:[email protected]+1 as myid from mytable) as t2 
ON t1.myid = t2.myid + 1 
) 
WHERE t1.col1= t2.col1 and t1.col2 = t2.col2 

そしてDELETEコマンドを、あなたが保存してください一時テーブルが作成され、そのIDが一時テーブルに格納されている行が削除されます。

SET @id1:=0 , @id2:=0 ; 
CREATE TEMPORARY TABLE tbl_ids AS 
SELECT t1.id FROM (-- t1.id returns NEXT row 
     (SELECT *, @id1:[email protected]+1 as myid from mytable) as t1 
LEFT JOIN 
     (SELECT *, @id2:[email protected]+1 as myid from mytable) as t2 
ON t1.myid = t2.myid + 1 -- t1.myid > t2.myid 
) 
WHERE t1.col1= t2.col1 and t1.col2 = t2.col2 ; 

DELETE FROM mytable WHERE id in (SELECT * FROM tbl_ids) ; 
+0

これがうまくいくかどうか試してみましょう。ところで、どこで削除することができますか? –

+0

前の行または次の行を削除したいのですか? @DatabaseAdmin – MohaMad

+0

次の行/列の値/結果に前の行/列と同じ値が含まれている場合、次の値/結果を削除する必要がありますが、次の列が前の列の値/削除しないでください。 –

関連する問題