假设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
**
答案 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