質問: | ユーザ | 更新時刻 | 値 | | --- | --- | --- | | Aさん | 2017-04-21 09:30:00 | 1 | | Aさん | 2017-04-21 09:35:00 | 2 | | Bさん | 2017-04-21 09:31:00 | 6 | | Bさん | 2017-04-21 09:40:00 | 3 | | Cさん | 2017-04-21 09:32:00 | 8 | | Cさん | 2017-04-21 09:42:00 | 4 | MYSQLで上のテーブルから各ユーザの最新の更新時刻の値を取るにはどのようなSQL文を書けばいいですか この場合ですと以下の結果を出すSQL文を教えてください。 | ユーザ | 更新時刻 | 値 | | --- | --- | --- | | Aさん | 2017-04-21 09:35:00 | 2 | | Bさん | 2017-04-21 09:40:00 | 3 | | Cさん | 2017-04-21 09:42:00 | 4 |
回答: ユーザ単位の最大の更新時刻を求めるクエリ ``` SELECT ユーザ, MAX(更新時刻) FROM テーブル GROUP BY ユーザ; ``` 最新(つまり最大)を求めるにはMAXという集合関数を使います。そして、それはユーザ単位での最大値なのでGROUP BYでユーザを指定します。これで各ユーザごとの最新の更新時刻の組み合わせが得られます。 この結果を使って、ユーザと最大の更新時刻を持つ組み合わせのレコードを探します。 ``` SELECT * FROM テーブル WHERE (ユーザ, 更新時刻) IN ( SELECT ユーザ, MAX(更新時刻) FROM テーブル GROUP BY ユーザ ); ```