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;
这是我的查询我有语法错误可以任何人帮我解决这个问题 提前谢谢
答案 0 :(得分:0)
因为你没有打扰告诉我们错误是什么我必须猜测,这就是这一行:
AND h.pk IN (SELECT pk FROM (SELECT * FROM report_history WHERE report_fk=r.pk) AS RESULT)
where条件的嵌套级别“太深”,我认为它在where子句中看不到r
别名。
但是嵌套的选择在你的情况下完全没用,所以你可以把这个条件重写为:
AND h.pk IN (SELECT pk FROM report_history WHERE report_fk=r.pk)
即使这不能解决您的问题,它也会使您的查询更具可读性。
然后你在where
子句中使用聚合也是不允许的,你必须将它移动到having子句。
having extract(epoch from (max(h.updated_datetime) - min(h.updated_datetime))) <=900
您也错过了结束 您还应该习惯明确的having
之后的group by
子句来自
)
,但由于您的格式(我发现非常难以阅读),这很难说清楚
JOIN
语法。 WHERE
子句中的隐式连接容易出错,不再推荐使用。