Число групп ActiveRecord с нулями

Company.group('year(created_at)').group('month(created_at)').count #=> {[2015, 4]=>62, [2015, 5]=>77, [2015, 6]=>61, [2015, 7]=>19, [2015, 8]=>16} 

Вышеуказанный запрос AR возвращает сгруппированное количество компаний по годам и месяцам.

Дело в том, что оно не возвращает никакой записи для группы с нулевыми компаниями.

Я ожидаю, что запрос вернет все группы, содержащие каждый месяц, начиная с месяца, когда первая компания была создана в течение текущего месяца , например:

 {[2015, 4]=>62, [2015, 5]=>77, [2015, 6]=>61, [2015, 7]=>19, [2015, 8]=>16, [2015, 9]=>0} #note the last entry - it is September (9nth month) with zero companies. 

Я знаю, что для возврата группы MySQL требуется хотя бы одна строка.

Есть (конечно, есть) обходные пути для моей потребности?

РЕДАКТИРОВАТЬ

Я ищу решение AR-запроса без каких-либо новых таблиц.

Вы думали о календарной таблице ? Хотя сайт очень старый, он все еще очень хорошо описывает использование такой таблицы:

  • Создайте общий объем продаж в день и включите дни, когда у вас нет продаж, таких как выходные.
  • Необходимо отслеживать данные по сезонам, что бы это ни значило для вашей компании.
  • Необходимо сравнивать данные, используя скользящие месяцы / периоды.

Хотя многие из этих проблем можно решить, написав код SQL, они намного проще с выделенной таблицей дат. Кроме того, таблица даты может быть настроена для отслеживания всего того, что вы хотите.

Поэтому в вашем случае вы создали бы такую ​​таблицу, а затем просто присоедините ее к своей модели Company .

Переходя к запросу типа:

 CalendarDay.where(year: Date.current.year).joins(:companies).group('YEAR(companies.created_at)').count