PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

W Railsach, jak mogę zapytać db o zagregowaną liczbę i pogrupować według tygodnia?

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

Daje wynik podobny do

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

gdzie klucz to [rok, tydzień], możesz użyć Date.commercial, aby uzyskać tydzień

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

I (tylko dlatego, że mogę), wersja zapytania mysql wygląda tak

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

Domyślnie zakłada się, że tydzień zaczyna się w poniedziałek, a pierwszy tydzień roku zaczyna się w pierwszy poniedziałek roku



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odejmij godziny od funkcji now()

  2. Jak usunąć wszystkie spacje z pola w bazie danych Postgres w zapytaniu aktualizującym?

  3. Tworzenie zrzutu bazy danych dla określonych tabel i wpisów Postgres

  4. 3 sposoby na wyświetlenie listy wszystkich procedur składowanych, które odwołują się do tabeli w PostgreSQL

  5. JPA Hibernate wywołuje procedurę składowaną