Just do IT

思うは招く

Railsで日付ごとにGROUP BYしてデータを取得したい

たとえば、過去7日間でどれだけのログが生成されたか知りたい場合。

> today = Time.current
=> Tue, 23 Aug 2022 15:32:59.608734000 JST +09:00

> seven_days_ago = today.ago(7.days).beginning_of_day
=> Tue, 16 Aug 2022 00:00:00.000000000 JST +09:00

> SomeLog.group('date(created_at)').where(created_at: seven_days_ago..(today.end_of_day)).order('date(created_at) ASC')
  • group('date(created_at)')で日付ごとにGROUP BYしてる
  • whereで過去7日間を表現してる
    • 本日を含むので実質8日間になってるがこれは各々カスタマイズしてもろて
  • orderをつけないと日付の順番がバラバラになるのでつけてる

もっと良い書き方があるかもしれない。