en primer lugar, esta es la consulta que crea el "historial del jugador" que se puede ejecutar tantas veces como desee y solo creará nuevo historial filas para los jugadores si no hay una fila de historial para ayer o si los valores han cambiado desde la última entrada de historial en el pasado.MySQL Specialists: elimine todas las filas anteriores a x días pero no la última
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;
ahora el problema es que también quiero limpiar la tabla de historial con una sola consulta. esto ya selecciona todas las entradas de historial anteriores a 10 días pero la última. pero no puedo hacer DELETE en lugar de 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);
así que ¿tehre una forma de hacer lo que quiero con una sola consulta de eliminación?