こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

ポスグレで指定した中で最大のレコードを1件取得する

ポスグレで指定した中で最大のレコードを1件取得する方法を教えてください。

下記の項目を持つテーブルがあるとします。
・部署
・氏名
・日付
・連番
・内容
KEY(部署,氏名,日付,連番)

部署と氏名を指定した中で直近のレコードを1件だけ取得したいです。

例えば
select * from テーブル
where 部署 = 値
and 氏名 = 値
order by 日付 desc ,連番 desc
で頭の1件を抜ければよいのですが、
limit 1を指定しても、どうやらorder byより先にlimitがかかっているようで、並び替えた後の最初の1件をとれません。

また、
ソート項目が1つだけなら
select * from テーブル
where 部署 = 値
and 氏名 = 値
and 日付 = (select max(日付) from テーブル t1 where t1.部署 = 値 and t1.氏名 = 値)
という事もできますが、
日付が最大の中での連番が最大というのはさらに一手間必要です。


何か良い方法はありませんか?

全件持ってきた後にアプリ側で最初の1件だけ使うのではなく、postgres内で1件にしてアプリ側に渡したいです。

投稿日時 - 2017-03-20 09:41:58

QNo.9307295

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

limit は order by が行われた後に実行されるので、並べ替えに問題があるのでしょう。
limit を付けずにSQLを実行してみて思い通りに並び替えられているか確認しましょう。

投稿日時 - 2017-03-20 10:36:25

お礼

有難うございます。
limit が先に効く事はないのですね。
試してみます。

投稿日時 - 2017-03-21 12:25:21

ANo.1

order by の前にlimit 1の処理が走ることはナイのでは?

order by の条件を複数にしたときの desc やら ask やら 日付 ・連番どっちを先に書くかがまちがってるだけのような?

まずlimit 1無しでsql実行して希望の並び順になっているかを確認してみては?

投稿日時 - 2017-03-20 09:59:45

お礼

有難うございます。
limit が先に効く事はないのですね。
試してみます。

投稿日時 - 2017-03-21 12:25:08