-2
    select * from (
    select max(h.updated_datetime) as max, min(h.updated_datetime) as min from report r, report_history h, procedure_runtime_information PRI, study S
    where 
    h.report_fk=r.pk and
    r.study_fk=S.pk and
    PRI.pk=S.procedure_runtime_fk and
    extract(epoch from (max(h.updated_datetime) - min(h.updated_datetime) ) <=900 and
    h.pk IN (
    select pk from 
    (select * from report_history where report_fk=r.pk) as result
    )

  and r.status_fk =21 group by r.pk)as result1;

这是我的查询我有一个语法错误任何人都可以帮我解决这个问题提前谢谢

4

1 回答 1

0

由于您没有费心告诉我们我必须猜测的错误是什么,那就是这一行:

AND h.pk IN (SELECT pk FROM (SELECT * FROM report_history WHERE report_fk=r.pk) AS RESULT)

where 条件的嵌套级别“太深”,我认为它看不到rwhere 子句中的别名。

但是无论如何,嵌套选择在您的情况下完全没用,因此您可以将该条件重写为:

AND h.pk IN (SELECT pk FROM report_history WHERE report_fk=r.pk)

即使这不能解决您的问题,它也会使您的查询更具可读性。

然后你在where子句中使用了一个聚合,这也是不允许的,你必须将它移动到一个有子句中。

having extract(epoch from (max(h.updated_datetime) - min(h.updated_datetime))) <=900

having子句位于_group by

你也错过了一个结束),但由于你的格式很难说(我觉得很难读)


您还应该习惯显式JOIN语法。子句中的隐式连接WHERE容易出错,不再推荐。

于 2013-06-04T09:12:07.277 回答