SQL - Ayuda con un delete

   
Vista:

Ayuda con un delete

Publicado por conniva (1 intervención) el 25/08/2009 09:52:41
Buenos días,

Mi consulta es la siguiente:

Tengo una tabla con registros con varios campos, uno de los cuales es una fecha.
El proceso debe detectar si existen registros almacenados con más de tres fechas, borrando en ese caso los registros cuya fecha sea menor a la antepenúltima.

Ejemplo:

Existen:
100 registros con fecha 25/08/2009
50 registros con fecha 24/08/2009
20 registros con fecha 20/08/2009
150 registros con fecha 15/08/2009

El proceso debe borrar los 150 registros con fecha 15/08/2009

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con un delete

Publicado por DALSOM (197 intervenciones) el 25/08/2009 15:03:05
A VER SI ENTENDI, ES SOLO BORRAR LOS QUE TENGAN MAS DE UNA FECHA EN LA MISMA TABLA. SE BORRARN MUCHOS. AHI TE VA, PARA LOS QUE TENGAN MAS DE UNA FECHA REPETIDA.

delete tabla where <Fieldfecha> in (select <fieldfecha> from tabla group by <fieldfecha> having count(<fieldfecha>) > 1)

SALUDOS,
DALSOM.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con un delete

Publicado por Antoni (17 intervenciones) el 27/08/2009 11:19:31
Resumen de lo que he entendido:

"Queremos respetar de la tabla, los registros con fecha igual o anterior a la fecha mas antigua de la 3 fechas mas recientes detectadas en la tabla"

Si es eso lo que necesitas, lo que sigue podría ser una solución.


A la tabla con los datos la llamaré D1

Creamos un tabla T1 con un campo FECHA en la base de datos

-------------------------------------------------
En el programa/procedimiento/consulta....:

Borramos la tabla T1:
------------------------
delete from T1

Llenamos la tabla T1 con 1 registro para cada fecha de la tabla D1:
------------------------------------------------------------------------------------------
insert into T1 (select distinct D1.FECHA from D1 order by D1.FECHA desc)

Borramos las 3 fechas recientes dela tabla T1:
---------------------------------------------------------------
delete first from T1 'Borra la 1ª fecha mas reciente
delete first from T1 'Borra la 2ª fecha mas reciente
delete first from T1 'Borra la 3ª fecha mas reciente

Borramos todos los registros que no corresponden a las 3 fechas mas recientes:
---------------------------------------------------------------------------------------------------------------
delete from D1 inner join T1 on D1.FECHA=T1.FECHA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar