Задать вопрос
mannaro
@mannaro
Умею профессионально гуглить

Как получить сумму значений по группе из таблицы?

Привет! У меня в базе хранятся записи о онлайне
id | user_id | count | created_at
1  | 1       | 12    | сегодня
2  | 4       | 26    | вчера

И я вывожу пользователям график, где показываю когда и какой был онлайн.
А сейчас мне надо админам вывести общий график. Для этого надо сгруппировать по дате (всех юзеров) и получить сумму онлайна.
Однако, дата у всех разная. Надо округлить до часа в меньшую сторону.

Помогите, совсем уж запарился.
  • Вопрос задан
  • 349 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
mannaro
@mannaro Автор вопроса
Умею профессионально гуглить
Пересмотрел архитектуру приложения. Теперь подобного вопроса нет. Всем спасибо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Как насчет .group('FLOOR(UNIX_TIMESTAMP(created_at) / 3600)')
Ответ написан
Комментировать
@tpepost
@grouped_entities = Entity.order('created_at DESC').group_by { |group| group.created_at.to_date }


Entity – наша модель модель (таблица).
.order('created_at DESC') – сортируем по убыванию.
.group_by { |group| group.created_at.to_date } – группируем по дате. Обратите внимание, что приходится created_at превратить в дату (to_date). Так как мы группируем по дате, а не по секундам.

Теперь во View можно сделать следующее:

<% @grouped_entities.each do |date, record_group| %>
  <h1>date</h1>
  <% record_group.each do |record| %>
    <%= record.some_method_to_display %>
  <% end %>
<% end %>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы