DX推進をサポートする情報サイト

 お問い合わせ 
プロフィール
技術者向け技術情報
TOP >技術者向け技術情報

【MySQL】left join したテーブルの最終レコードを抽出SQL文

2022-07-05
 DBを始めた頃日報登録を作った時ですが、EXCELに毛が生えた程度のものでした。
得意先マスターのテーブルと日報テーブルとは得意先コードでJOINさせて 一覧表を作成したとき得意先の右側に最終に登録した日報のみを表示させたかったがやり方はわからず。
本を読んだり、google先生に聞いたり、下記のやり方を見つけるのに1ヶ月間かかってしまいました。
知ってしまえばどうってことないのですが、もしこれで困った人がいたら参考にしてください。

<手法>
  select 得意先コード,得意先名,日報ID,訪問日,訪問内容 from 日報テーブル as a
  left join 得意先テーブル as b on a.得意先コード = b.得意先コード
  where a.日報ID = (select max(日報ID) from 日報 where a.得意先コード = 得意先コード

  ※日報IDは、登録された順に加算されるとする。(auto_increment)

<解説>
  日本語でいうと
  得意先コードで join している日報テーブルの最終「max(日報ID)」を抽出しなさいとなる。

得意先テーブル
得意先コード 得意先名
10001 A株式会社
10002 株式会社B
10003 C通信株式会社
日報テーブル
日報ID 得意先コード 訪問日 内容
3 10001 22/6/7 見積提出
2 10001 22/5/26 提案実施
1 10001 22/5/22 初回訪問

 このテーブルを結論に記載しているSQL文より下記のよう得意先に対応する最終日報を表示される。
得意先コード 得意先名 日報ID 訪問日 内容
10001 A株式会社 3 22/6/7 見積提出
10002 株式会社B
10003 C通信株式会社
 ※株式会社B、C通信株式会社の日報データがあれば同様に表示される。