質問: ### 前提・実現したいこと MySQLで詰まっています。 1つのSQLであるカラムの集計(該当する項目のみ)集計に関係のないカラムの値が取りたいです。可能であればSQL文を教えてください。 ### 発生している問題・エラーメッセージ 簡単にするために以下のようなテーブルを作ってみました。 <testテーブル> id int ai up_time datetime qty int sub_id int picupno int データ id up_time qty sub_id picupno 1 2017-10-01 00:00:00 20 1 0 2 2017-09-30 07:00:00 30 1 0 3 2017-10-02 00:00:00 100 2 1 4 2017-10-03 07:00:00 200 2 2 読みにくくてすいません。 sub_idごとにqtyの合計が必要です。更にsub_idごとのup_timeの毎の一番新しいup_timeとpicupnoが欲しいのです。 望む結果は、 up_time picupno sum(qty) 2017-10-01 00:00:00 1 50 2017-10-03 07:00:00 2 300 up_timeの最新(sub_idごとの)でその行のpicupnoとsub_idごとのsum(qty)です。 ### 試したこと SELECT *,sum(`qty`) FROM `test` WHERE `sub_id` IN(1,2) GROUP BY `sub_id` や SELECT *,max(`up_time`), sum(`qty`) FROM test GROUP BY `sub_id` order by `up_time` DESC いづれもup_timeが直近ではなく、picupnoも望むものではありません。 よろしくお願いいたします ### 補足情報(言語/FW/ツール等のバージョンなど) 実動環境では SELECT *,sum(`qty`) ... GROUP BY `sub_id` とかやると非集約ラムは参照できないというようなエラーが発生します。
回答: sub_idとup_timeの値が同じ行がないことを条件に、下記のように考えました。 ``` SELECT t1.sub_id, t1.picupno, t2.qty, t2.up_time FROM test t1 INNER JOIN (SELECT sub_id, SUM(qty) qty, MAX(up_time) up_time FROM test GROUP BY sub_id) t2 ON t1.sub_id = t2.sub_id AND t1.up_time = t2.up_time; ```