質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2821閲覧

【PostgreSQL】特定のIDで最大値の枝番号のデータを取得したい

koaradosu

総合スコア8

PostgreSQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/01/29 14:15

編集2020/01/29 22:22

前提・実現したいこと

特定のidで枝番(edaban)が最大値のデータを取得したいです。

発生している問題・エラーメッセージ

SQL文での正しい書き方が分からず、エラーを吐き続けています。
正しいSQLを教えて頂ければ幸いです。

下記のテーブルで、
idが'A1'でedabanが最大値のレコードを取得したいのですが、どのようなSQL文にすれば宜しいでしょうか。
A1,002,BBB,2020-01-25 09:35:43 のようなデータを取得出するのが理想です。
どうぞ宜しくお願い致します。

該当のソースコード

table_master +----+--------+------------+----------------------+ | id | edaban | syurui | date | +----+--------+------------+----------------------+ | A1 | 001 | AAA | 2020-01-24 08:21:01 | | A1 | 002 | BBB | 2020-01-25 09:35:43 | | B2 | 001 | BBB | 2020-01-25 10:51:12 | | B3 | 001 | BBB | 2020-01-25 12:10:50 | | C1 | 002 | CCC | 2020-01-26 16:51:08 | +----+--------+------------+----------------------+

試したこと

SELECT id, MAX(edaban), syurui, date FROM table_master WHERE (id,edaban,shurui,date) IN(select id, MAX(edaban),date FROM table_master WHERE(id,shurui) IN(SELECT id ='A1', MAX(shurui) FROM table_master GROUP BY id) GROUP BY id,shurui);

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

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

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

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

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

sazi

2020/01/29 14:47

「idが'1'」とはどういう意味ですか?
koaradosu

2020/01/29 14:57

saziさん Aが抜けておりました... ご指摘ありがとうございます。
sazi

2020/01/29 17:46

> idが'A1'でedabanが最大値 なら、サンプルデータでは、edabanは'001'ですけど、求めたい結果は'002'になっています。 どのような法則でしょうか?
koaradosu

2020/01/29 23:51

度々のご指摘ありがとうございます。 '001'と'002'の書き間違えです...
sazi

2020/01/30 00:49 編集

質問のデータを修正されたのですね。
guest

回答2

0

取り敢えず、以下の2パターンで、実行計画を確認し、効率の良い方を採用して下さい。
※(id, edaban)のインデックスは最低限必要だと思います。

SQL

1-- 相関副問合せ 2SELECT * 3FROM table_master t1 4WHERE id='A1' 5 and edaban = ( 6 select max(edaban) 7 from table_master 8 wheren id=t1.id 9 ) 10 11-- 副問合せ 12SELECT * 13FROM table_master 14WHERE (id, edaban) in ( 15 select id, max(edaban) 16 from table_master 17 where id='A1' 18 group by id 19 )

投稿2020/01/30 01:00

sazi

総合スコア25188

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

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

koaradosu

2020/01/30 01:30

saziさん ご指摘含め、本当にありがとうございます。 自分で当初やりたいと思ってたのが副問合せの書き方だったので参考になります!
guest

0

ベストアンサー

最大の枝番のIDと枝番を取得して、これを本テーブルにJOIN(key:id、edaban)してA1を選んでいます。
枝番はvarcharとしていますが、NUMERIC(3)の方が良いかも

sql

1create temp table table_master (id varchar, edaban varchar, syurui varchar, date timestamp, 2primary key (id, edaban)); 3insert into table_master values 4( 'A1' , '001' , 'AAA' ,'2020-01-24 08:21:01' ), 5( 'A1' , '002' , 'BBB' ,'2020-01-25 09:35:43' ), 6( 'B2' , '001' , 'BBB' ,'2020-01-25 10:51:12' ), 7( 'B3' , '001' , 'BBB' ,'2020-01-25 12:10:50' ), 8( 'C1' , '002' , 'CCC' ,'2020-01-26 16:51:08' ); 9 10SELECT m.* FROM table_master m, 11(SELECT id, MAX(edaban) as edaban FROM table_master group by id) t 12WHERE 13m.id=t.id AND m.edaban=t.edaban 14AND m.id='A1'; 15 16SELECT m.* FROM table_master m 17JOIN (SELECT id, MAX(edaban) as edaban FROM table_master group by id) t 18USING(id, edaban) WHERE m.id='A1';

投稿2020/01/29 22:44

編集2020/01/29 22:50
amura

総合スコア333

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

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

koaradosu

2020/01/30 01:25

amuraさん ありがとうございます! 無事に理想通りのデータが得られました。 JOIN使ったやり方もあったのですね・・・ 勉強になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問