Eliminar filas de la tabla, excepto el número especificado (número límite de filas)

Cómo eliminar todas las filas de la tabla MYSQL (2 millones de filas), manteniendo, p. Ej. últimos 100.

La consulta para seleccionar lo que quiero mantener sería:

SELECT id FROM mytable ORDER by date DESC LIMIT 100; 

Entonces necesito una consulta que elimine todas las filas excepto las seleccionadas en esta consulta. Preparar una list de identificaciones usando where in parece una exageración.

Tal vez podrías intentar algo como esto:

 DELETE FROM mytable WHERE id NOT IN (SELECT id FROM mytable ORDER by date DESC LIMIT 100) 

DELETE FROM mytable WHERE date < (SELECT date FROM mytable ORDER BY date DESC LIMIT 100,1)

trata eso

Debería eliminar todos los loggings, pero las últimas 100 inputs basadas en la columna de date

editar: errores tipocharts

Puede usar una statement preparada. Probé en MySQL y funciona.

 PREPARE row_del FROM 'DELETE FROM mytable LIMIT ?' ; SELECT @row_num := count(*) - 100 FROM mytable ; EXECUTE row_del USING @row_num ;