简体   繁体   English

将嵌套的子查询转换为普通查询

[英]Convert a nested subquery into normal query

I have problem with following query where in which the nested query should be converted to normal query: 我对以下查询有疑问,其中嵌套查询应转换为普通查询:

    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;

Assuming this 假设这个

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

should really be: 确实应该是:

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

You could transform the nested ( correlated ) subquery into a plain subquery like this (one way of many): 您可以将嵌套( 相关 )子查询转换为普通的子查询,如下所示(多种方式之一):

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM