2013-06-05 8 views
7

を選択、私は最高のインデックスを持つ行の値を取得するクエリを記述しようとしています「my_id」:のPostgreSQL、PG 9.1でlibpqを使用することにより、最大の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

これは、ありがとうございます。私は1つだけ(最速)を受け入れることができますが、すべての回答が助けになりました、申し訳ありません。 –

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

か、あなたの目標は最高のmy_id値を持つ行を取得する場合は、次のクエリは同じ目標を達成する必要があり

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

だけのオーダーと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にインデックスがある場合、サブクエリを持つインデックスが高速になります。あなたがインデックスを持っていないときは、 "注文"を取る。 (obv。データベースサイズに依存する場合)

+0

おそらくもう一方の方法です。 Postgresは、インデックスが適用できるところで 'LIMIT 1'クエリを最適化します。 –