PostgreSQL,从最大ID选择

23

我正在使用PG 9.1上的libpq,尝试编写查询以获取具有最大索引“my_id”的行中的值:

SELECT my_id, col2, col3 
FROM mytable 
WHERE my_id = MAX(my_id)

这让我遇到了错误:

错误:聚合函数不允许在WHERE子句中使用...

如何正确编写这样的查询?

5个回答

49

如果您的目标是获取具有最高my_id值的行,则以下查询应该实现相同的目标。

SELECT my_id, col2, col3 
FROM mytable 
ORDER BY my_id DESC 
LIMIT 1

就是这样,谢谢。我只能接受一个(最快的),但所有的答案都有帮助,抱歉。 - Wine Too
那种事后看来显而易见的答案之一。 - ijoseph

13

只需按my_id排序,并使用limit 1仅取第一条记录。

SELECT my_id, col2, col3
FROM mytable 
order by my_id desc
limit 1

另一种但表现不太好的方法是

SELECT my_id, col2, col3
FROM mytable 
where my_id = (select max(my_id) from mytable)

8

子查询可能对你有帮助

SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytable)

4
SELECT my_id, col2, col3 FROM mytable WHERE my_id = (select MAX(my_id) FROM mytab)

或使用

SELECT my_id, col2, col3 FROM mytable ORDER BY my_id DESC LIMIT 1

0

当你在my_id上有一个索引时,带有子查询的那些查询应该会更快。当你没有索引时,请使用"order by"。(显然,这取决于数据库大小是否相关)


可能是相反的情况。Postgres 会优化适用索引的 LIMIT 1 查询。 - Andrew Lazarus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接