Я предполагаю, что это Postgres, а название модели - Пользователь, основываясь на вашем предыдущем вопросе.
Если этот блог считается верным , вы можете изменить дату на один день чтобы получить солнечную дневную неделю.
User.group("(date_trunc('week', created_at::date + 1)::date - 1)")
.count
Если вы хотите, чтобы фактический номер недели выбирался у вас, вы можете выбрать необработанные данные из базы данных вместо использования ActiveRecord :: Calculations # count , что довольно ограничено.
class User
# @return [ActiveRecord::Result]
# the raw query results with the columns count, year, week
def self.count_by_biblical_week
connection.select_all(
select(
"count(*) as count",
"date_part('year', created_at)::integer as year",
"(date_part('week', created_at::date + 1) - 1)::integer as week"
).group(:week, :year)
)
end
end
Использование:
results = User.where(created_at: Date.new(2020,3,16)..Date.new(2020,3,22))
.count_by_biblical_week
results.each do |row|
puts [row[:year], row[:week], row[:count]].join(' | ')
end
Добавление года в группу позволяет избежать двусмысленности, если результаты охватывают несколько лет.