1
日付の列に応じて行を削除しようとしていますが、指定した日付の間にある行を削除したいので、常に最も古い行と最新のものを保持したい中央の行が削除されます。私は現在、このコードを使用していますMySQL |中間の日付範囲から行を削除する
...
DELETE t FROM tracking t INNER JOIN users u ON u.id = t.uid WHERE u.name = :name
この早い行である単一の行を削除します。どういうわけか、私は2行の真ん中の行を削除し、別々の行にある日付も削除する必要があります。
画像は、現在のテーブルがレイアウトされる方法を示しています。強調表示された行は、削除したい行です。
DELETE t
FROM tracking t INNER JOIN
users u
ON u.id = t.uid INNER JOIN
(SELECT t.uid, MIN(tracked_date) as mintd, MAX(tracked_date) as maxtd
FROM tracking t
GROUP BY t.uid
) tt
ON t.uid = tt.uid
WHERE u.name = :name AND
t.tracked_date NOT IN (tt.mintd, tt.maxtd);
次のバージョンは、おそらくより良いパフォーマンスがあります:
DELETE t
FROM tracking t INNER JOIN
users u
ON u.id = t.uid INNER JOIN
(SELECT t.uid, MIN(tracked_date) as mintd, MAX(tracked_date) as maxtd
FROM tracking t INNER JOIN
users u
ON u.id = t.uid
WHERE u.name = :name
GROUP BY t.uid
) tt
ON t.uid = tt.uid
WHERE u.name = :name AND
t.tracked_date NOT IN (tt.mintd, tt.maxtd);
を追加のサブクエリに参加するので、それはより複雑に見えます。ここ
これは機能しますが、まだ2つではなく3つの行で終わりますか? – tallent123
これは私のせいで、delete文の後に挿入されました!これは魅力的な、ありがとう!] – tallent123