Oracle - Problema con Reporte

 
Vista:

Problema con Reporte

Publicado por Gustavo (1 intervención) el 10/06/2008 21:36:45
Hola a todos...
Tengo un tabla donde tengo todos los datos necesarios para mi reporte salvo las actividades. Encontré esta última tabla pero solo tengo como datos accesibles el usuario, fecha y hora y el nro. de ticket que es el que me relaciona a la primer tabla.
El tema es el sig.:
a partir de la actividad de un usuario (lo tengo identificado) tengo que calcular dentro de las 48 hs. sig. los usuarios que se encuentran en la tabla de actividades. El problema que se me presenta primero es que dicho usuario puede estar repetido, por lo que de esta repetición necesito la fecha y hora mínima. Todo esto lo realicè con la query que les adjunto, pero el problema es que tarda muchìsimo (supera la hora) y esto es inviable. Sè que me estoy equivocando en algo, el problema es que nose en que.
Las tablas se componen de lo sig.:

Tabla_Act Tipo de dato
numberdw NUMBER
datestamp DATE
operator VARCHAR2(50)

Tabla_CM Tipo de dato
Id_number_char VARCHAR2(20)
status VARCHAR2(50)
approval_status VARCHAR2(50)
current_phase VARCHAR2(50)
orig_date_entered DATE
company VARCHAR2(50)
brief_description VARCHAR2(100)
approved_groups CLOB
approved_oper CLOB
approved_dates CLOB
current_pending_groups CLOB

Y esta es la query que logré hasta el momento:
/**************************************************************************************************/
/*Necesitaremos desde el módulo de Change, saber a partir de que se puso el cambio en fase "Testing" y en approval status "Pending" quienes no lo aprobaron pasadas las 48 hs.
Y además quienes no lo aprobaron antes de las 10 hs del día viernes……
Los usuarios son: Mtomasa, Sramirez */
SELECT
cm3.id_number_char,
datos.nacos_48hs,
datos.f_y_h_48hs,
cm3.status,
cm3.approval_status,
cm3.current_phase,
cm3.orig_date_entered,
cm3.company,
cm3.brief_description,
cm3.approved_groups AS T_Grup_Aprob,
cm3.approved_oper AS usuarios_aprob_total,
cm3.approved_dates AS T_Fech_Aprob,
cm3.current_pending_groups AS Grup_no_Aprob

/*************************/FROM/************************/

(SELECT
act.numberdw AS numero,
act.operator AS usuarios_48hs,
act.datestamp AS f_y_h_48hs
FROM
(SELECT /*Aqui sale el min. de los min. de la aprob. de CM, este es único*/
num,
MIN(minimo) AS timeref
FROM
(SELECT /*Aqui sale el min. de la aprob. de CM, pero pueden haber + de 1 (Silvia o Matias)*/
acti.numberdw AS num,
MIN(acti.datestamp) AS minimo
FROM
Tabla_Act acti
WHERE 1=1
AND acti.numberdw LIKE '123-02-'
AND acti.datestamp > '01/05/2008'
AND acti.operator IN ('Mtomasa', 'Sramirez')
GROUP BY (acti.numberdw)
)
GROUP BY (num)
) tref, Tabla_Act act
WHERE 1=1
AND act.numberdw = tref.num (+) /*join de la tabla de CM con la de minimos x c/CM */
AND act.operator NOT IN('Mtomasa', 'Sramirez')
AND act.datestamp > (tref.timeref + 2)
GROUP BY (act.numberdw, act.operator, act.datestamp)) datos, Tabla_CM cm3

/************************/WHERE/************************/

1=1
AND (cm3.orig_date_entered BETWEEN '01/05/2008' AND '05/05/2008')
AND cm3.company IN ('Repsol','CocaCola','Manliba')
AND cm3.id_number_char = datos.numero (+) /*join de la tabla CM con la de Aprob 48hs x c/CM*/
/**************************************************************************************************/
No obstante, durante el transcurso de todo esto me mandaron de otro lado la solución que aplica otro sector a lo mismo (con ciertas modificaciones solo en los usuarios y filtros de fecha) pero el problema es que me mandaron un procedure, y ese es otro tema que tengo, nunca utilicé procedures ni PL/SQL (apenas si salgo a flote con SQL a secas...).
Trabajo desde SQL Server (conectado a una base en Oracle) y tengo que diseñar un reporte que levante esto.
¿Alguien me puede ayudar?

Mil 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