PG 9.1 で libpq を使用して、最高のインデックス「my_id」を持つ行から値を取得するクエリを作成しようとしています。
SELECT my_id, col2, col3
FROM mytable
WHERE my_id = MAX(my_id)
それは私にエラーを与えます:
エラー: 集計は WHERE 句では許可されていません...
そのようなクエリを適切に記述する方法は?
PG 9.1 で libpq を使用して、最高のインデックス「my_id」を持つ行から値を取得するクエリを作成しようとしています。
SELECT my_id, col2, col3
FROM mytable
WHERE my_id = MAX(my_id)
それは私にエラーを与えます:
エラー: 集計は WHERE 句では許可されていません...
そのようなクエリを適切に記述する方法は?
目標が my_id 値が最も高い行を取得することである場合、次のクエリは同じ目標を達成する必要があります。
SELECT my_id, col2, col3
FROM mytable
ORDER BY my_id DESC
LIMIT 1
並べ替えて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)
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
my_id にインデックスがある場合、サブクエリを使用する方が高速になるはずです。インデックスがない場合は、「順序付け」を取ります。(明らかに、関連する場合はデータベースのサイズに依存します)