按月分组数据库而不是ruby

时间:2013-12-04 14:26:51

标签: sql ruby-on-rails ruby postgresql group-by

我正在尝试按月分组calls,但我需要在数据库中进行,而不是ruby。这是当前的代码:

Call.limit(1000).group_by { |t| t.created_at.month }

返回:

SELECT `calls`.* FROM `calls` ORDER BY created_at desc LIMIT 1000

然后ruby进行分组。我该怎么做才能使数据库完成工作?

谢谢。

2 个答案:

答案 0 :(得分:1)

简短的回答是,你无法在SQL级别获得相同的结果。

以下是完整的解释。

首先,该通话应该是什么结果?您可以使用PG / SQL Group BY语句,但结果可能不是您所期望的。

Group By语法用于对具有模式的行进行分组,以及计算和聚合函数。在您的情况下,即使假设您创建使用date_truncgroup 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