MySQL Spezialisten: Löschen Sie alle Zeilen, die älter als x Tage, aber nicht die Letzte

zunächst, dies ist die Abfrage, die erstellt die "Spieler der Geschichte"
es kann so Häufig ausgeführt werden, wie Sie wollen und es wird nur neues Geschichte-Reihen für die Spieler, wenn es keine Geschichte Zeile für gestern, oder wenn die Werte sich geändert, seit der neuesten Geschichte-Eintrag in die Vergangenheit.

INSERT INTO `player_history` (`player_id`, `date`, `races`, `maps`, `playtime`, `points`)
SELECT `p`.`id`, DATE_SUB(NOW(), INTERVAL 1 DAY), `p`.`races`, `p`.`maps`, `p`.`playtime`, `p`.`points`
FROM `player` `p`
WHERE `p`.`playtime` IS NOT NULL
AND `p`.`playtime` > 0
AND (
    SELECT `player_id`
    FROM `player_history`^
    WHERE `player_id` = `p`.`id`
    AND (
        `date` = DATE_SUB(NOW(), INTERVAL 1 DAY)
        OR (
            `date` < DATE_SUB(NOW(), INTERVAL 1 DAY)
            AND `races` = `p`.`races`
            AND `points` = `p`.`points`
            AND `maps` = `p`.`maps`
            AND `playtime` = `p`.`playtime`
        )
    )
    ORDER BY `date` DESC
    LIMIT 1
) IS NULL;

nun das problem ist, ich möchte auch zu Bereinigung der history-Tabelle mit einer einzigen Abfrage. diese bereits selektiert alle Einträge, die älter als 10 Tage, aber die neuesten. aber ich kann, wie LÖSCHEN, anstatt SELECT *.

SELECT *
FROM `player_history` `ph`
WHERE `date` < DATE_SUB(NOW(), INTERVAL 10 DAY)
AND `date` != (SELECT `date`
    FROM `player_history`
    WHERE `player_id` = `ph`.`player_id`
    ORDER BY `date` DESC
    LIMIT 1);

so tehre ist ein Weg, das zu tun, was ich will, mit einer einzigen Abfrage löschen?

Schreibe einen Kommentar