-PR-
解決済み

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

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

お礼率 90% (19/21)

ポスグレで指定した中で最大のレコードを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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 25% (163/652)

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

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

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

お礼率 90% (19/21)

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

その他の回答 (全1件)

  • 回答No.2
レベル14

ベストアンサー率 39% (2353/6028)

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

お礼率 90% (19/21)

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


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


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

-PR-

ピックアップ

-PR-
ページ先頭へ