- ベストアンサー
MySQLのSELECT文でLEFT OUTER JOINとGROUP BYを使用して最大値を持つレコードを取得する方法
- MySQLのSELECT文でLEFT OUTER JOINとGROUP BYを使用して、特定のカラムに対応する最大値を持つレコードを取得する方法について解説します。
- 具体的なテーブル構造と検索条件を元に、LEFT OUTER JOINとGROUP BYを組み合わせて最大値を持つレコードを取得するSQL文を示します。
- また、あなたの現在のSQL文の問題点についても指摘し、修正案を提案します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こうすれば希望する検索結果になるんじゃないでしょうか SELECT a.supplier,b.skuno,max(update_at) from a LEFT JOIN b ON a.supplier = b.supplier WHERE a.user = 1 GROUP BY a.supplier; 問題はupdate_atフィールドで、「update_at IN (select max」の条件が適用される時、結合テーブルからsupplier2,3が消えるのが困るわけですよね。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
こうですね select a.supplier,b.skuno from tableA as a left join tableB as b on b.supplier=a.supplier and (b.supplier,b.update_at) IN (select supplier,max(update_at) as update_at from tableB group by supplier) where user=1
- yamada_g
- ベストアンサー率68% (258/374)
こんな感じでしょうか・ MySQLの環境が無く動作確認はしていないので、文法エラーなどがあったら適宜修正してください。 select A.supplier, B.skuno from tableA as A left join tableB as B on ( A.supplier = B.supplier and B.update_at IN ( select max(update_at) from tableB as B2 where B.supplier = B2.supplier group by supplier)) where A.userid = 1;
お礼
まさにその通りです! なんだかややこしい方に考えてしまっていたみたいで・・・。 お力添えの程、ありがとうございましたm(_ _)m