Tengo una tabla que contiene entradas de registro para un programa que estoy escribiendo. Estoy buscando ideas sobre una consulta SQL (estoy usando SQL Server Express 2005) que mantendrá el número más reciente de registros X, y eliminaré el resto. Tengo una columna de fecha y hora que es una marca de tiempo para la entrada de registro.Consulta SQL para eliminar filas más antiguas en un determinado recuento de filas?
Me parece algo así como lo siguiente, pero no estoy seguro del rendimiento con la cláusula IN para un mayor número de registros. El rendimiento no es crítico, pero podría hacerlo lo mejor que pueda la primera vez.
DELETE FROM MyTable WHERE PrimaryKey NOT IN
(SELECT TOP 10,000 PrimaryKey FROM MyTable ORDER BY TimeStamp DESC)
debería mencionar que esta consulta se ejecutará 3-4 veces al día (como parte de otro proceso), por lo que el número de registros que se eliminará con cada consulta será pequeño en comparación con el número de registros que se mantendrán.
¿Lo has probado? ¿Funciona bien?SI no es crítico, y lo que tienes funciona, es bastante obvio lo que está sucediendo, y es "lo suficientemente rápido" ir con él. – Nate
No lo he probado, pero debería funcionar. Admito que soy culpable de optimizar demasiado, es un mal hábito. –