查询PostgreSQL DB的最大时间戳

时间:2015-02-02 13:20:14

标签: sql performance postgresql select optimization

假设PostgreSQL表中有3行名为tracker。我想单独获取最新的更新记录。请帮助我实现它。

(issue_id,priority,ingest_date)
(1,1,"2015-01-27 00:00:00")
(1,2,"2015-01-28 00:00:00")
(1,3,"2015-01-29 00:00:00")

我试过给

select * 
from tracker 
where ingest_date = (select max(ingest_date) from tracker);

这对我来说很好。 但有没有更好的方法可以查询数据库?

提前致谢。

我想要像

这样的东西
select * 
from etl_change_fact 
where ingest_date = max(ingest_date);

但是我收到了这个错误

**ERROR: aggregates not allowed in WHERE clause
**

2 个答案:

答案 0 :(得分:3)

您可以按照以下方式执行此操作。只需选择最新记录......

 SELECT * from tracker ORDER BY ingest_date DESC LIMIT 1

此查询将始终只返回一条记录。 如果ingest_date包含重复项,则您的查询可以返回多行。

答案 1 :(得分:1)

如果您知道ingest_date是唯一的(即,只有一行是最新的),您可以使用fetch first子句:

SELECT      *
FROM        tracker
ORDER BY    ingest_date DEXC
FETCH FIRST 1 ROWS ONLY

如果无法做出此假设,您可以使用rank窗口函数返回所有“最新”记录:

SELECT issue_id, priority, ingest_date
FROM   (SELECT issue_id, priority, ingest_date, 
               RANK() OVER (ORDER BY ingest_date DESC) AS rk
        FROM   tracker)
WHERE  rk = 1