Ver Mensaje Individual
  #9 (permalink)  
Antiguo 04/03/2010, 12:56
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Eliminar todo menos 10 registros recientes

Suponiendo que esa tabla sea una tabla real, no hay forma de hacer lo que pides sin hacer al menos dos consultas, ya que hay que recuperar el punto desde el cual los registros sean válidos:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tester` (
  2. `idstats` int(2) NOT NULL auto_increment,
  3. `20` int(2) NOT NULL,
  4. PRIMARY KEY (`idstats`)
  5. ) ENGINE=MyISAM DEFAULT
  6. CHARSET=latin1 COLLATE=latin1_spanish_ci
  7.  
  8. INSERT INTO tester(`20`)
  9. VALUES (16), (35), (93), (83), (12), (47), (56), (85), (24), (85), (37), (45), (67), (69), (55), (23), (44), (55);
  10.  
  11. SELECT MIN(idstats) ID INTO @A
  12.   (SELECT idstats, `20`
  13.   FROM tester t
  14.   ORDER BY idstats DESC
  15.   LIMIT 10) T;
  16.  
  17. DELETE FROM tester
  18. WHERE idstats<@A;

Estoy en este caso usando una variable de usuario que tiene vigencia durante una misma conexión.
Mi sugerencia sería usar stored procedures para implementar esto. De esa forma sólo harías una llamada.

Si la PK fuese otra, de todos modos podría servir, si la misma establece una secuencia cronológica de entrada.

Tip final: No uses números como nombres de columna. Eventualmente tendras errores de sintaxis si te olvidas los "`".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)