sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan kan jeg med Rails forespørge i db'en for et samlet antal og grupperet efter uge?

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

Vil give et resultat som

{[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}

hvor nøglen er [år, uge], så kan du bruge Date.commercial for at få ugen for

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
 

Og (bare fordi jeg kan), ser mysql-versionen af ​​forespørgslen sådan ud

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

Dette forudsætter som standard, at ugen starter om mandagen, og den første uge i et år starter den første mandag i året



  1. Oracle ORA-00933:SQL-kommando blev ikke afsluttet korrekt?

  2. Vælg forespørgsel ved hjælp af betingelsen

  3. bruge virtuelle felter til at summere værdier i cakephp

  4. Sådan installeres sqlcmd &bcp på Ubuntu