Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 01-feb-2007, 12:55   #1 (permalink)
jperezgaxiola ha deshabilitado el karma
 
Fecha de Ingreso: enero-2007
Mensajes: 11
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.
jperezgaxiola está desconectado   Responder Citando
Antiguo 01-feb-2007, 15:52   #2 (permalink)
Moderador
Mithrandir llegará a ser famoso muy prontoMithrandir llegará a ser famoso muy pronto
 
Avatar de Mithrandir
 
Fecha de Ingreso: abril-2003
Mensajes: 12.108
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
Mithrandir está desconectado   Responder Citando
Antiguo 05-feb-2007, 15:18   #3 (permalink)
el.patron no se puede cailificar en este momento
 
Avatar de el.patron
 
Fecha de Ingreso: febrero-2007
Ubicación: Sevilla (España)
Mensajes: 6
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
el.patron está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 22:57.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93