2013-05-09 55 views
1

我有問題,下面的查詢,其中,其中所述嵌套查詢應該是 轉爲正常查詢:轉換嵌套子查詢到正常查詢

select 
count(*) as count, 
TO_CHAR(RH.updated_datetime,'DD-MM-YYYY HH:MI:SS') as date, 
SUM(
    extract (
     epoch from (
     RH.updated_datetime - PRI.procedure_performed_datetime 
    ) 
    )/60 
)::integer/count(*) as diff 

from 
procedure_runtime_information PRI, 
study S, 
report R, 
report_history RH 
where 

RH.report_fk = R.pk AND 
R.study_fk = S.pk AND 
S.procedure_runtime_fk = PRI.pk AND 
RH.old_status_fk = 21 AND 
RH.revision = (select max(revision) from report_history where RH.report_fk = RH.report_fk) AND 
RH.updated_datetime > TO_DATE('22-01-2013 00:00:00', 'DD-MM-YYYY HH24:MI:SS') AND RH.updated_datetime < TO_DATE('22-01-2014 00:00:00', 'DD-MM-YYYY HH24:MI:SS') 

group by date order by date asc; 

回答

2

假設這

(select max(revision) from report_history where RH.report_fk = RH.report_fk) 

確實應該:

(select max(revision) from report_history x where x.report_fk = RH.report_fk)

您可以轉換嵌套(相關)子查詢到這樣一個普通的子查詢(許多單程):

SELECT count(*) AS ct 
     ,to_char(rh.updated_datetime,'DD-MM-YYYY HH:MI:SS') AS date -- HH24? 
     ,sum(extract(epoch FROM (RH.updated_datetime 
          - PRI.procedure_performed_datetime)) 
         /60)::int/count(*) AS diff 
FROM procedure_runtime_information PRI 
JOIN study       S ON S.procedure_runtime_fk = PRI.pk 
JOIN report      R ON R.study_fk = S.pk 
JOIN report_history    RH ON RH.report_fk = R.pk 
JOIN (
    SELECT report_fk, max(revision) AS revision 
    FROM report_history RH1 
    GROUP BY 1 
    ) RH1 ON RH1.report_fk = RH.report_fk 
     AND RH1.revision = RH.revision 
WHERE RH.old_status_fk = 21 
AND RH.updated_datetime > to_date('22-01-2013', 'DD-MM-YYYY') -- >= ? 
AND RH.updated_datetime < to_date('22-01-2014', 'DD-MM-YYYY') -- to_timestamp? 
GROUP BY date -- where does date come from? 
ORDER BY date; 
+0

由於它的工作就像一個魅力 – 2013-05-21 07:13:25