Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

restar un dia a una fecha para determinar la fecha fin de la vigencia de un producto

Estas en el tema de restar un dia a una fecha para determinar la fecha fin de la vigencia de un producto en el foro de SQL Server en Foros del Web. de nuevo dando batalla raza, mi siguiente problema es: estoy migrando una base de datos de una empresa que usa un sistema "X" a la ...
  #1 (permalink)  
Antiguo 01/02/2007, 13:55
 
Fecha de Ingreso: enero-2007
Mensajes: 11
Antigüedad: 17 años, 10 meses
Puntos: 0
restar un dia a una fecha para determinar la fecha fin de la vigencia de un producto

de nuevo dando batalla raza, mi siguiente problema es:
estoy migrando una base de datos de una empresa que usa un sistema "X" a la base de datos que usa mi sistema, tengo una tabla origen, la cual contiene un campo fecha, la tabla a la cual voy a pasar esa informacion necesita dos datos de fecha, estas fechas determinan el periodo de vigencia del registro un ejemplo seria:
PRODUCTOA, MATERIAPRIMAA, FECHAINICIO_A, FECHAFIN_A,
PRODUCTOA, MATERIAPRIMAA, FECHAINICIO_B, FECHAFIN_B, cuando se decide cambiar la vigencia para la combinacion PRODUCTOA, MATERIAPRIMAA, se agrega otro registro con distinto periodo de vigencia, estos periodos jamas se deben traslapar, o sea no se puede tener la combinacion :
PRODUCTOA, MATERIAPRIMAA, FECHAINICIO_A, FECHAFIN_A,
PRODUCTOA, MATERIAPRIMAA, FECHAINICIO_A, FECHAFIN_B,
la forma en que se determina la vigencia en la tabla origen es:
PRODUCTOA, MATERIAPRIMAA, FECHA_A,
PRODUCTOA, MATERIAPRIMAA, FECHA_B, la fecha FECHA_B que representa la fecha de inicio de vigencia para el segundo registro, a su vez representa la fecha fin menos un dia del primer registro, lo que yo necesito es un procedimiento que me reste un dia a la siguiente fecha de la tabla origen, siempre y cuando corresponda a la vigencia del mismo productoA y MateriaA,
para restar el dia uso la funcion DATEADD(DAY, -1, FECHA), el lio es como decirle al procedimiento que la FECHA a la cual se le restara el dia es a la siguiente y no a la del registro donde esta posicionado, y como lo explique anteriormente, que la fecha siguiente corresponda a la misma combinacion PRODUCTOA, MATERIAPRIMAA, estoy probando usando una subconsulta, pero aun no doy, cualquier ayuda, como siempre se les agradecera encarecidamente.
  #2 (permalink)  
Antiguo 01/02/2007, 16:52
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 7 meses
Puntos: 25
Re: restar un dia a una fecha para determinar la fecha fin de la vigencia de un produ

Asumiendo que quieres la fecha más vieja para el inicio (FECHAINICIO_A < FECHAINICIO_B) y que quieres la fecha más nueva para el fin (FECHAFIN_A < FECHAFIN_B) puedes probar con:

SELECT Producto, Min(FechaInicio) AS MinFechaInicio, Max(FechaFin) AS MaxFechaFin
FROM tabla
GROUP BY Producto

Y sobre esa sentencia hacer las operaciones.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 05/02/2007, 16:18
Avatar de el.patron  
Fecha de Ingreso: febrero-2007
Ubicación: Sevilla (España)
Mensajes: 6
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: restar un dia a una fecha para determinar la fecha fin de la vigencia de un produ

A ver:
Yo entiendo que para una combinación productoA-materiaPrimaA tienes en la tabla vieja una serie de fechas (fechaA, fechaB, fechaC, fechaD) y quieres tener en la nueva tabla:
ProductoA, MateriaPrimA, FechaA, FechaB-1
ProductoA, MateriaPrimA, FechaB, FechaC-1
ProductoA, MateriaPrimA, FechaC, FechaD-1

Si lo he entendido bien, debería funcionar algo así:
Código:
Insert into NuevaTabla Select V1.producto, V1.MateriaPrima, V1.Fecha, Min(DATEADD(DAY, -1, V2.Fecha)) From ViejaTabla As V1 
Join ViejaTabla As V2 On V1.producto = V2.producto And V1.MateriaPrima = V2.MateriaPrima And V1.Fecha < V2.Fecha
Group By V1.producto, V1.MateriaPrima, V1.Fecha
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:11.