Cantidad de registros con consultas correlacionadas
Publicado por jose (4 intervenciones) el 28/11/2013 16:39:51
Hola expertos.
Alguien podría ayudarme con el siguiente problema, soy nuevo en esto y me enfrento con algo complicado para mi.
se los agradeceré bastante.
mi escenario es el siguiente:
tengo una tabla dim de tiempo como la siguiente:
fecha | año | mes | dia |dia_laborable |
2013/08/01 | 2013 | 8 | 1 | SI
2013/08/02 | 2013 | 8 | 2 | SI
2013/08/03 | 2013 | 8 | 3 | NO
2013/08/04 | 2013 | 8 | 4 | NO
2013/08/05 | 2013 | 8 | 5 | SI
2013/08/06 | 2013 | 8 | 6 | SI
2013/08/07 | 2013 | 8 | 7 | SI
2013/08/08 | 2013 | 8 | 8 | SI
2013/08/09 | 2013 | 8 | 9 | SI
2013/08/09 | 2013 | 8 | 9 | NO
etc.....
y por otra parte tengo una tabla fact como la siguiente:
ID_ticket | FECHA_CREACION | FECHA_CIERRE |
1 | 2013/08/01 | 2013/08/05 |
2 |2013/08/02 | 2013/08/08 |
3 |2013/08/01 | 2013/08/06 |
4 |2013/08/01 | 2013/08/09 |
5 |2013/08/01 | 2013/08/04 |
6 |2013/08/01 | 2013/08/03 |
7 |2013/08/01 | 2013/08/09 |
el resultado que necesito es la cantidad de registros (para cada ticket) que hay en la tabla dim tiempo en base a la fecha de creacion y fecha cierrey que dia laborable='SI', algo asi como:
ID_ticket | FECHA_CREACION | FECHA_CIERRE | cantidad_dias
1 | 2013/08/01 | 2013/08/05 | 2
2 |2013/08/02 | 2013/08/08 | 4
3 |2013/08/01 | 2013/08/06 | 3
4 |2013/08/01 | 2013/08/09 | 6
5 |2013/08/01 | 2013/08/04 | 2
6 |2013/08/01 | 2013/08/03 | 2
7 |2013/08/01 | 2013/08/09 | 6
yo supongo que lo puedo obtener con subconsultas correlacionadas y mi query hasta ahora es el siguiente pero por alguna razon no obtengo el dato correcto.
select h.FC_CREACION , h.FC_CIERRE
, (select count(f.fecha) from dim_fecha f where (f.fecha=h.fc_creacion) and (f.fecha >= ALL (select h.FC_CREACION from fact_table h where f.fecha=h.fc_creacion ) and f.fecha < ALL (select h.FC_CIERRE from fact_table h where f.fecha=h.FC_CIERRE )) and (f.dia_laborable like 'SI') ) as cantidad
from fact_table h
alguna idea, sugerencia?
De ante mano muchas gracias.
Saludos!!!
Alguien podría ayudarme con el siguiente problema, soy nuevo en esto y me enfrento con algo complicado para mi.
se los agradeceré bastante.
mi escenario es el siguiente:
tengo una tabla dim de tiempo como la siguiente:
fecha | año | mes | dia |dia_laborable |
2013/08/01 | 2013 | 8 | 1 | SI
2013/08/02 | 2013 | 8 | 2 | SI
2013/08/03 | 2013 | 8 | 3 | NO
2013/08/04 | 2013 | 8 | 4 | NO
2013/08/05 | 2013 | 8 | 5 | SI
2013/08/06 | 2013 | 8 | 6 | SI
2013/08/07 | 2013 | 8 | 7 | SI
2013/08/08 | 2013 | 8 | 8 | SI
2013/08/09 | 2013 | 8 | 9 | SI
2013/08/09 | 2013 | 8 | 9 | NO
etc.....
y por otra parte tengo una tabla fact como la siguiente:
ID_ticket | FECHA_CREACION | FECHA_CIERRE |
1 | 2013/08/01 | 2013/08/05 |
2 |2013/08/02 | 2013/08/08 |
3 |2013/08/01 | 2013/08/06 |
4 |2013/08/01 | 2013/08/09 |
5 |2013/08/01 | 2013/08/04 |
6 |2013/08/01 | 2013/08/03 |
7 |2013/08/01 | 2013/08/09 |
el resultado que necesito es la cantidad de registros (para cada ticket) que hay en la tabla dim tiempo en base a la fecha de creacion y fecha cierrey que dia laborable='SI', algo asi como:
ID_ticket | FECHA_CREACION | FECHA_CIERRE | cantidad_dias
1 | 2013/08/01 | 2013/08/05 | 2
2 |2013/08/02 | 2013/08/08 | 4
3 |2013/08/01 | 2013/08/06 | 3
4 |2013/08/01 | 2013/08/09 | 6
5 |2013/08/01 | 2013/08/04 | 2
6 |2013/08/01 | 2013/08/03 | 2
7 |2013/08/01 | 2013/08/09 | 6
yo supongo que lo puedo obtener con subconsultas correlacionadas y mi query hasta ahora es el siguiente pero por alguna razon no obtengo el dato correcto.
select h.FC_CREACION , h.FC_CIERRE
, (select count(f.fecha) from dim_fecha f where (f.fecha=h.fc_creacion) and (f.fecha >= ALL (select h.FC_CREACION from fact_table h where f.fecha=h.fc_creacion ) and f.fecha < ALL (select h.FC_CIERRE from fact_table h where f.fecha=h.FC_CIERRE )) and (f.dia_laborable like 'SI') ) as cantidad
from fact_table h
alguna idea, sugerencia?
De ante mano muchas gracias.
Saludos!!!
Valora esta pregunta
0