0

以下 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列中)的条目感兴趣。我如何表达qp.tsWHERE 条件应该等于performance.query_plan表中最新添加的行?

4

3 回答 3

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
于 2013-04-23T13:12:12.857 回答
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 更早,则查询不返回任何内容。

如果有些较旧,有些较新,则返回最新值。

于 2013-04-23T13:12:49.667 回答
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
于 2013-04-23T15:34:26.930 回答