2013-06-05 25 views
7

使用选择的libpq在PG 9.1,我想写查询从排得值与指数最高的“添加my_id”:PostgreSQL的,从最大ID

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

这给了我错误:

ERROR: aggregates not allowed in WHERE clause...

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

回答

19

如果你的目标是获得最高添加my_id值的行,那么下面的查询应达到同样的目的。

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

就是这样,谢谢。我只能接受一个(最快),但所有答案都有帮助,对不起。 –

2
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 
5

只是为了通过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) 
4

子查询可以帮助你

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

当你在my_id上有索引时,子查询中的索引应该更快。当你没有一个索引采取“顺序”。 (如果相关,取决于数据库大小)

+0

也许相反。 Postgres优化了索引适用的“LIMIT 1”查询。 –