我正在尝试按月分组calls
,但我需要在数据库中进行,而不是ruby
。这是当前的代码:
Call.limit(1000).group_by { |t| t.created_at.month }
返回:
SELECT `calls`.* FROM `calls` ORDER BY created_at desc LIMIT 1000
然后ruby
进行分组。我该怎么做才能使数据库完成工作?
谢谢。
答案 0 :(得分:1)
简短的回答是,你无法在SQL级别获得相同的结果。
以下是完整的解释。
首先,该通话应该是什么结果?您可以使用PG / SQL Group BY语句,但结果可能不是您所期望的。
Group By语法用于对具有模式的行进行分组,以及计算和聚合函数。在您的情况下,即使假设您创建使用date_trunc
到group by a part of the timestamp的查询,聚合函数也不允许您返回结构化为Ruby group_by
方法的数据集。
为什么要在数据库级别计算此类分组?
如果您有特定要求或计算限制,请使用自定义方法。
答案 1 :(得分:0)
使用Call.limit(1000).group(“month(created_at)”)
请检查适用于您的情况的mysql日期时间方法。但是.group()会进行mysql分组。
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_month