🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

12505閲覧

SELECT MAXで複数行ある場合その中のMAXを出力したい。

ponpon123

総合スコア9

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/02/25 07:54

編集2021/02/26 04:31

前提・実現したいこと

現在PostgreSQLを使用してシステムを作成しています。
その中でSELECT MAXを使用して、最大数を求めるという処理をしていたのですが、
システムの変更によりMAX値が2つ、3つ、複数ある場面が出来てしまいました。

MAX値が複数ある場合、他の値のMAXを見て一つだけ行を出力できるようにしたいです。
少し日本語がおかしいかもしれませんが伝わっていなければ質問していただきたいです。

該当のソースコード

PostgreSQL

1CREATE TABLE public.data 2( 3 date date, 4 update date, 5 id integer 6) 7 8TABLESPACE pg_default; 9 10ALTER TABLE public.data 11 OWNER to postgres;

PostgreSQL

1SELECT * FROM data WHERE date = (SELECT MAX(date)FROM data AS us WHERE data.id = us.id) ORDER BY id ASC; 2 3//date.idではなくdata.idのコードミスでした。

サンプルデータを入力したテーブル

dateupdateid
2021-02-252021-02-261
2021-02-262021-02-261
2021-02-262021-02-251
2021-02-262021-02-252
2021-02-252021-02-252

提示したコードを入力した場合

dateupdateid
2021-02-262021-02-261
2021-02-262021-02-251
2021-02-262021-02-262

実際出力したいもの

dateupdateid
2021-02-262021-02-261
2021-02-262021-02-262

同じIDのデータが二つ以上ある場合updateの日付が一番最新の物のみを出力するというSQL文を書きたいです。

試したこと

色々調べてみたのですが自力で探すことが出来なかったため、質問させていただきました。
よろしお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/02/26 00:40

テーブルdataの構造がわかるものを示してください(例えば CREATE TABLE文、できればサンプルデータも)。
ponpon123

2021/02/26 04:33

提示情報が少なく申し訳ありません。 CREATE TABLE文、サンプルデータ、実現したいサンプル出力データを追記しました。 誤字もあり、分かりにくかったと思います。すみません。
guest

回答1

0

ベストアンサー

row_number()を使用してID毎の順位ルールによる連番を生成し、その連番=1を条件にする。

SQL

1select * 2from ( 3 select * 4 , row_number() over(partition by id order by date desc, update desc) id_seq 5 from data 6) t 7where id_seq=1

投稿2021/02/26 17:07

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponpon123

2021/03/01 00:51

ありがとうございます。望んでいた出力が出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問