-PR-
回答 受付中

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

  • すぐに回答を!
  • 質問No.9307295
  • 閲覧数138
  • ありがとう数2
  • 気になる数0
  • 回答数2

お礼率 85% (17/20)

ポスグレで指定した中で最大のレコードを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件にしてアプリ側に渡したいです。
通報する
  • 回答数2

回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 24% (154/632)

order by の前にlimit 1の処理が走ることはナイのでは? order by の条件を複数にしたときの desc やら ask やら 日付 ・連番どっちを先に書くかがまちがってるだけのような? まずlimit 1無しでsql実行して希望の並び順になっているかを確認してみては? ...続きを読む
order by の前にlimit 1の処理が走ることはナイのでは?

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

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

お礼率 85% (17/20)

有難うございます。
limit が先に効く事はないのですね。
試してみます。
投稿日時 - 2017-03-21 12:25:08
関連するQ&A


  • 回答No.2
レベル14

ベストアンサー率 38% (2211/5731)

コンピューター カテゴリマスター
limit は order by が行われた後に実行されるので、並べ替えに問題があるのでしょう。 limit を付けずにSQLを実行してみて思い通りに並び替えられているか確認しましょう。 ...続きを読む
limit は order by が行われた後に実行されるので、並べ替えに問題があるのでしょう。
limit を付けずにSQLを実行してみて思い通りに並び替えられているか確認しましょう。
お礼コメント
questorfe

お礼率 85% (17/20)

有難うございます。
limit が先に効く事はないのですね。
試してみます。
投稿日時 - 2017-03-21 12:25:21
  • 回答数2
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ