Página 1 de 1

Borrar datos de una tabla, en rangos de tiempo

NotaPublicado: 2012-02-27 17:04 @752
por animal collective
Estimados,

Estoy presentando el siguiente caso: tengo una Base de Datos MySQL (reportes) la cual contiene una tabla (eventos) de un tamaño de 18 Gb.

Esta tabla contiene los eventos de hace más de 2 años (2010-2012).

Necesito ejecutar un comando en el cual borre lo que esté de tres meses hacia atrás. Ejemplo: que en la tabla solo me quede con la información de diciembre 2011, enero 2012 y febrero 2012, y todos los datos desde enero 2010 hasta noviembre 2011 sean borrados.

¿Es posible realizar esto, sin necesidad de tener que crear un script que haga muchos delete?

Desde ya, agradezco su ayuda.

Saludos

Re: Borrar datos de una tabla, en rangos de tiempo

NotaPublicado: 2012-02-27 17:44 @780
por explorer
Con DBI, desde Perl, puedes ejecutar algo como esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $lapso = 90 * 24 * 60 * 60;  # 90 días, pasados a segundos
  2. my $status = $dbh->do("DELETE FROM tabla WHERE (UNIX_TIMESTAMP() - campo_fecha_unix) > $lapso");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

para el caso de que el campo_fecha_unix sea un campo que guarda la fecha en forma UNIX_TIMESTAMP.

En caso de que el campo sea un campo de fecha normal, puedes usar esta otra:

DELETE FROM tabla WHERE DATE_SUB(CURDATE(),INTERVAL 90 DAY) <= campo_fecha;

Lo que hace es tomar el día de hoy (CURDATE()), quitarle 90 días, y ver si la fecha resultante es menor o igual a la fecha que almacena el campo campo_fecha. De esa manera, solo te quedas con los últimos 90 días.

Para estar seguros, antes de hacer un DELETE, haces un SELECT y así ves antes que es lo que se va a borrar.

Re: Borrar datos de una tabla, en rangos de tiempo

NotaPublicado: 2012-03-31 18:49 @826
por animal collective
Estimado, el problema que en la máquina que deseo realizar esta consulta no tiene Perl, debo realizarla directa sobre la base de datos. En ese caso ¿cómo sería la query, es posible realizarlo sin necesidad de aplicar código?

Re: Borrar datos de una tabla, en rangos de tiempo

NotaPublicado: 2012-03-31 19:23 @849
por explorer
La query está en el código... ¿No la ves? Está escrita en SQL.