以下PostgreSQL SELECT查询始终返回结果,因为performance.query_plan
表包含多个具有不同TIMESTAMP
值的条目:
SELECT * FROM
performance.query q,
performance.query_plan AS qp
WHERE
q.idx = qp.queryidx
AND q.newplanneeded > qp.ts
LIMIT 1;
在performance.query_plan
表中的这几个条目中,我只对具有最新时间戳值的条目感兴趣(存储在q.newplanneeded
列中)。如何表示WHERE条件中的qp.ts
应该等于performance.query_plan
表中最新添加的行?
答案 0 :(得分:2)
SELECT (q).*, (qp).*
FROM (
SELECT q,
(
SELECT qp
FROM query_plan qp
WHERE qp.queryidx = q.idx
ORDER BY
ts DESC
LIMIT 1
) qp
FROM query q
) qv
WHERE (q).newplanneeded > (qp).ts
ORDER BY
(q).idx
LIMIT 1
答案 1 :(得分:2)
您的查询需要order by
:
select * from
performance.query q,
performance.query_plan qp
WHERE
q.idx = qp.queryidx
AND q.newplanneeded < qp.ts
order by ts desc
limit 1;
我只是改变了比较的方向。
如果所有都是ts
且比q.newplanneeded旧,则查询不返回任何内容。
如果某些较旧且某些较新,则会返回最新值。
答案 2 :(得分:0)
select distinct on (q.idx) *
from
performance.query q,
performance.query_plan qp
WHERE
q.idx = qp.queryidx
order by q.idx, qp.ts desc