Попытка JSON_ARRAYARG в запросе активной записи сгруппировать по дневному времени - PullRequest
1 голос
/ 03 ноября 2019

Я разработал

query = "SELECT date_format(recorded_at,'%d/%m/%Y %I:%m %p'), JSON_ARRAYARG(contact_id) FROM #{table_name } where id = 123 GROUP BY date_format(recorded_at,'%d/%m/%Y %I:%m %p')"

Приведенный выше запрос предоставляет мне массив contact_ids с датой в качестве ключа. Теперь мне нужно преобразовать этот запрос в активную запись, но агрегаторы не работают.

CampaignOpen.where('campaign_id = ? ', 9891).select("DATE_FORMAT(recorded_at,'%d/%m/%Y %I:%m %p')","JSON_ARRAYAGG(contact_id)" ).group("date_format(recorded_at,'%d/%m/%Y %I:%m %p')").as_json

Теперь date_format и JSON_ARRAYARG не выполняются и дают результаты, подобные этому

[{"id"=>nil, "date_format(recorded_at,'%d/%m/%Y %I:%m %p')"=>"30/05/2016 01:05 PM", "JSON_ARRAYAGG(contact_id)"=>"[24, 1, 1, 1]"}, {"id"=>nil, "date_format(recorded_at,'%d/%m/%Y %I:%m %p')"=>"31/05/2016 08:05 PM", "JSON_ARRAYAGG(contact_id)"=>"[1]"}]

я ожидаю, что

{"30/05/2016 01:05 PM"=>"[24,5,6,7]", "31/05/2016 08:05 PM"=>"[1,3,4,5]"}

У любого есть предложение о том, как мы можем использовать эти две агрегатные функции здесь. Или какой-то чистый подход к этому?

...