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通信株式会社の日報データがあれば同様に表示される。