PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

С Rails, как мога да направя заявка в db за обобщено число и групирано по седмица?

points_by_week = Log.where(user_id: user_id).group("DATE_TRUNC('year', created_at)", "DATE_TRUNC('week', created_at)").sum(:points)

Ще даде резултат като

{[2014, 4]=>3,
 [2014, 8]=>7,
 [2015, 4]=>26,
 [2015, 6]=>19,
 [2015, 12]=>50,
 [2015, 32]=>48,
 [2016, 2]=>78,
 [2016, 3]=>45,
 [2016, 4]=>49,
 [2016, 5]=>110,
 [2016, 45]=>30,
 [2017, 4]=>130,
 [2017, 11]=>185}

където ключът е [година, седмица], тогава можете да използвате Date.commercial, за да получите седмицата на

points_by_week.each do |(year, week), count|
  date = Date.commercial(year, week)
  puts "Week of #{date.strftime('%d/%m/%Y')} - #{count} total points"
end

И (само защото мога), mysql версията на заявката изглежда така

points_by_week = Log.where(user_id: user_id).group("year(created_at)", "week(created_at)").sum(:points)

Това по подразбиране предполага, че седмицата започва в понеделник, а първата седмица от годината започва в първия понеделник на годината



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разположите PostgreSQL на DigitalOcean

  2. Създаване на таблично пространство в postgresql

  3. Получаване на стойност на колона от предишния ред в postgres не може да използва функцията за прозорец в UPDATE

  4. Как да напишете заявка, нечувствителна към главните букви и за MySQL, и за Postgres?

  5. Django Postgres ArrayField агрегиране и филтриране