2015-02-05 3 views
0

Я использую драгоценный камень groupdate для группировки записей с датой/временем. Я хочу сгруппировать записи и выбрать пользователей с предложением, а затем сгруппировать записи с датой/месяцем/временем. Но это не дает правильный результат, который я хочу. например:Явная группа и предложение с графом `groupdate`

User.group_by_month(:created_at).count # gives proper result but 
User.joins("LEFT JOIN devices ON devices.user_id=users.id").group("users.id").having("COUNT(devices.id)=0").count #gives all users in hash while i want only count for the months. 

Я использую это для показа графики с использованием chartkick камня.

Любая помощь будет оценена по достоинству.

+0

попытка 'User.joins ("LEFT JOIN устройств на devices.user_id = users.id"). Группу ("users.id"). Имеющий ("COUNT (devices.id) = 0"). count.length' – Sontya

+0

Я не могу, поскольку мне просто нужно отправить этот результат на карту, и код, который я написал, является общим для всех. – jbmyid

ответ

0

Наконец-то я получил обходное решение для него, используя 2 запроса.

user_ids = User.joins("LEFT JOIN devices ON users.id=devices.user_id").group("users.id").having("count(devices.id)=0").pluck("users.id") 

User.where(id: user_ids).group_by_month("created_at").count 

Другим способом было включить первый запрос в подзапрос.

User.where("id IN (SELECT u.id FROM users u LEFT JOIN devices ON u.id=devices.user_id GROUP BY us.id HAVING count(devices.id)=0)").group_by_month("created_at").count 
Смежные вопросы