SQL - Actualizar Fechas de un campo a fecha de otro mas 1

 
Vista:

Actualizar Fechas de un campo a fecha de otro mas 1

Publicado por Pepe (2 intervenciones) el 30/05/2012 13:46:32
Hola, tengo una tabla con los campos [numero], [fechaalta], [fechabaja].

Hay varios registros en los que [número] tiene varias [fechabaja] igual a NULL, y quiero actualizar todos esos NULL a ([fechaalta] del siguiente registro +1)excepto el último [fechabaja] que debe quedar a NULL.

Asi está ahora:
Numero fechaalta fechabaja
1 01/01/1990 01/02/1990
1 02/02/1990 null
1 03/01/1990 null
1 04/01/1990 null

Y quiero que quede así:
Numero fechaalta fechabaja
1 01/01/1990 01/02/1990
1 02/02/1990 03/02/1990
1 03/03/1990 04/03/1990
1 04/04/1990 null


¿ Me podeis ayudar?

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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Actualizar Fechas de un campo a fecha de otro mas 1

Publicado por leonardo_josue (1173 intervenciones) el 30/05/2012 21:13:10
Hola Pepe:

Lo mismo que le he comentado a muchísimos foristas, ¿qué base de datos estás utilizando? sin esta información es difícil darte una respuesta puntual sobre lo que estás preguntando. Ojo con eso a la próxima.

El update en realidad no es complicado, las condiciones serían tal cual como las has escrito, en pseudocódigo sería más o menos así:

1
2
3
UPDATE tu_tabla SET fechabaja = (fechaalta + 1 día)
WHERE fechabaja IS NULL
and fechaalta != (Seleccionar la fecha máxima de la tabla)


El único problema que veo es que algunos DBMS como MySQL no te permiten hacer subconsultas en el WHERE sobre la misma tabla que estás actualizando... sin embargo puedes hacer la subconsulta en la lista de tablas a actualizar, es decir algo como esto:

1
2
3
4
UPDATE tu_tabla T1, (seleccionar la fecha máxima de la tabla) T2
SET T1.fechabaja = (fechaalta + 1 día)
WHERE T1.fechabaja IS NULL AND
T1.fechaalta != T2.fecha_máxima_de_la_tabla


Haz algunas pruebas, si continuas con problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a corregir los errores.

saludos
Leo.
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

Actualizar Fechas de un campo a fecha de otro mas 1

Publicado por Pepe (2 intervenciones) el 31/05/2012 12:12:49
Hola Leo, ante todo gracias por contestar.

La BBDD que estoy utilizando es SQLSERVER 2008

Ya he realizado algunas pruebas y me va funcionando,aunque tengo que excluir de la actualización los registros que tienen la fecha mas actual y no se como hacerlo exactamente, ya que me encuentro con errores de sintaxis.

Lo que estoy haciendo es un EXCEPT dentro de la select del UPDATE, y no lo consigo. Si tu tienes alguna idea te agradecería me la aportaras. No necesito que sea un EXCEPT, a lo mejor hay una solución mejor.

Te pongo la SELECT para que lo veas mejor.

UPDATE Tabla1 SET Tabla1.[FECHABAJA]=
(SELECT DateAdd("d", -1, min(T1.[FECHAALTA])) FROM T1

WHERE T1.[numero]= T1.[numero] AND T1.[FECHAALTA]> t1.[FECHAALTA)

Esto me da como resultado casi lo que quiero, pero como [numero] coincide en varios registros no puedo solo tomar este campo como filtro, tengo que exceptuar los registros cuya [FECHAALTA], sea la última de cada [numero], de esa manera dejo solo una FECHABAJA a NULL por cada numero.

Un Saludo
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