MySQLなどのRDBで特定カラムをグルーピングしながら、そのカラムが最大値となるレコードのみを取り出したい時があります。 具体的にはコンテンツを最新の閲覧順に並べたい場合がそれに当たりますが、これを実現するには少しクエリを工夫する必要があります。 何年か前にRailsで開発中に同様のユースケースに直面した際、当時自分のSQL力が低いゆえに2度クエリを発行していましたが、今思うとActiveRecordを使っても1クエリで実現できるので、その場合の対応法を紹介します。 ケーススタディ ユーザーが映画を閲覧した時に履歴が保存される場合、映画を閲覧日順に重複なしで並べるクエリを書いてみましょう。 次のようなテーブル構成を想定します。 またhistoriesテーブルには以下のようなレコードが挿入されています。 id user_id movie_id created_at
![Railsで閲覧日順など、最大値でグルーピングしたDBレコードを1クエリで取得する2つの方法 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/cf4c4381f42c503c3073e74a5e63abe1a90de445/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZ0eHQ9UmFpbHMlRTMlODElQTclRTklOTYlQjIlRTglQTYlQTclRTYlOTclQTUlRTklQTAlODYlRTMlODElQUElRTMlODElQTklRTMlODAlODElRTYlOUMlODAlRTUlQTQlQTclRTUlODAlQTQlRTMlODElQTclRTMlODIlQjAlRTMlODMlQUIlRTMlODMlQkMlRTMlODMlOTQlRTMlODMlQjMlRTMlODIlQjAlRTMlODElOTclRTMlODElOUZEQiVFMyU4MyVBQyVFMyU4MiVCMyVFMyU4MyVCQyVFMyU4MyU4OSVFMyU4MiU5MjElRTMlODIlQUYlRTMlODIlQTglRTMlODMlQUElRTMlODElQTclRTUlOEYlOTYlRTUlQkUlOTclRTMlODElOTklRTMlODIlOEIyJUUzJTgxJUE0JUUzJTgxJUFFJUU2JTk2JUI5JUU2JUIzJTk1JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz01MWY5NmY1Yzk5Y2ViYWZjMTU3YWQ1OTFhYjRmMjI5Zg%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwdHRpZ2VyNTUmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTAwYzQxZWUxMGRkYTk1ZjRiNzY1MTU4ZmJjNjc5YWVl%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D354b808efb010c2da6677868e8b9c7ed)