Ayuda con select de fechas
Que tal, tengo un problema con una vista y estoy atorado ya, espero alguien me
pueda dar una ayuda.
Tengo una tabla A y una tabla B, la tabla B puede tener N regsitros asociados a
un id de la tabla A. En la tabla B se guardan registros cada vez que se afecta o
se cumple un plazo, por lo que en la tabla B se guarda una fecha y un
consecutivo. El problema es que si tengo una fecha dada, por ejemplo 15/05/2005,
en la tabla B puede o no existir un registro que se encuentre en el mes 05,
hasta ahi no hay problema. Mi problema viene cuando:
A. Necesito mostrar el regsitro mencionado y los de la fecha anterior mas
cercana y la fecha posterior mas cercana. En este caso si es el mes 05, el
reciente mas cercano puede ser 04 y el siguiente mas cercano puede ser 06.
B. el id que busco tal vez no tenga un regitro asociado en el mes 05, pero si
tiene uno en el 03 y otro en el 09, por lo que 05 esta entre estos 2, y por lo
tanto debo mostrarlo tambien.
Como puedo resolver esto para crear una vista?
Si alguien tiene alguna idea lo agradezco de antemano, tengo el query
aproximado, pero me faltan esos 2 pequeños detalles.
pueda dar una ayuda.
Tengo una tabla A y una tabla B, la tabla B puede tener N regsitros asociados a
un id de la tabla A. En la tabla B se guardan registros cada vez que se afecta o
se cumple un plazo, por lo que en la tabla B se guarda una fecha y un
consecutivo. El problema es que si tengo una fecha dada, por ejemplo 15/05/2005,
en la tabla B puede o no existir un registro que se encuentre en el mes 05,
hasta ahi no hay problema. Mi problema viene cuando:
A. Necesito mostrar el regsitro mencionado y los de la fecha anterior mas
cercana y la fecha posterior mas cercana. En este caso si es el mes 05, el
reciente mas cercano puede ser 04 y el siguiente mas cercano puede ser 06.
B. el id que busco tal vez no tenga un regitro asociado en el mes 05, pero si
tiene uno en el 03 y otro en el 09, por lo que 05 esta entre estos 2, y por lo
tanto debo mostrarlo tambien.
Como puedo resolver esto para crear una vista?
Si alguien tiene alguna idea lo agradezco de antemano, tengo el query
aproximado, pero me faltan esos 2 pequeños detalles.
hay una movida que se llama outer join, y aplica en el caso de un join como el tuyo, en la tabla A, el columna fecha especifica: A.campo_fecha(+) = b.campo_fecha
Gracias por el tip, pero ese es otro problema, en la tabla A no hay una fecha que se relacione a la tabla B, solo el id, y en la tabla B hay muchos id de la tabla A
A mi se me ocurre hacerlo por medio de UNION'S si entendi bien la descripción de tus tablas, mas o menos serÃa algo asi:
select b.fecha, b.id
from tablaB b
where b.fecha = '01/05/2005' and
b.id = 1
UNION
(select b.fecha,b.id
from tablab b
where b.fecha IN
(select min c.fecha
from tablab c
where c.fecha > '01/05/2005' and
c.id = b.id
) and
b.id = 1
)
UNION
(select b.fecha, b.id
from tablab b
where b.fecha IN
(select max c.fecha
from tablab c
where c.fecha < '01/05/2005' and
c.id = b.id
) and
b.id = 1
)
select b.fecha, b.id
from tablaB b
where b.fecha = '01/05/2005' and
b.id = 1
UNION
(select b.fecha,b.id
from tablab b
where b.fecha IN
(select min c.fecha
from tablab c
where c.fecha > '01/05/2005' and
c.id = b.id
) and
b.id = 1
)
UNION
(select b.fecha, b.id
from tablab b
where b.fecha IN
(select max c.fecha
from tablab c
where c.fecha < '01/05/2005' and
c.id = b.id
) and
b.id = 1
)
