• Publicidad

Borrar datos de una tabla, en rangos de tiempo

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Borrar datos de una tabla, en rangos de tiempo

Notapor animal collective » 2012-02-27 17:04 @752

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
animal collective
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 43
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile

Publicidad

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

Notapor explorer » 2012-02-27 17:44 @780

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.005 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.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12881
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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

Notapor animal collective » 2012-03-31 18:49 @826

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?
animal collective
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 43
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile

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

Notapor explorer » 2012-03-31 19:23 @849

La query está en el código... ¿No la ves? Está escrita en SQL.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12881
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado