Eliminar todo menos 100 líneas

Iniciado por dimitrix, 7 Enero 2016, 13:43 PM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

¡Hola amigos!

Os escribo para ver si me podéis ayudar a encontrar la query más limpia para el siguiente caso.

Tengo un listado de libros por categorías que se va actualizando, por ejemplo:



ID Category Título Time
--------------------------------------------------
1 nature amor de árbol 1456578945
2 nature pajas camperas 1456578946
3 nature El sol 1456578947
...
241 hackers Alex en la red 1456578948
242 hackers Peibol Gay 1456578949
243 hackers El binario 1456578950
...
571 love Yo y mi mano 1456579501
572 love Mu hetero 1456579502
573 love Love&Pajas 1456579503


Y necesito hacer una query que elimine todos menos los 100 últimos de cada categoría (pensar que el time es el timestamp de la hora que se ha añadido).

La gracia está en que se pudiera hacer en una sola query ¿Cómo lo haríais vosotros?




Shell Root

Se puede limitar el número de filas eliminadas mediante TOP, así que yo pensaría hacer una subconsulta que haga un COUNT() y de ahí restarle 100 y realizar el DELETE.

PD: No tengo SQL Server aqui en este equipo para realizar pruebas, pero eso se me ocurre.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

dimitrix

Ahora mismo estoy usando MySQL, te agradecería a ver si luego puedes hechar un ojo pues no me sale en una sola query.

Creo que la gracia sería una query con una subquery con otra subquery, creo que esto se parece cada vez más a Origen (la película).

DELETE FROM libros WHERE ID IN (SELECT ID FROM LIBROS WHERE (SubQuery 2))




peib0l


Espero que esto te sirva:

DELETE FROM libros WHERE ID NOT IN (SELECT ID FROM LIBROS ORDER BY id DESC LIMIT 100 )

Shell Root

Mi 2da pelicula favorita después de Hombre en Llamas jajaja

Código (sql) [Seleccionar]
DELETE FROM table LIMIT ((SELECT COUNT(*) FROM table)-100)

Así lo pensaba yo
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.