使用created_at选择记录范围

时间:2012-08-23 16:35:44

标签: sql ruby-on-rails ruby activerecord

我想通过created_at属性选择一系列模型记录,我尝试了这个查询

Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)

但它返回一个空数组。

1.9.3-p125 :029 > Client.where('created_at BETWEEN ? AND ?', 30.days.from_now, DateTime.now.utc)
  Posting Load (1.0ms)  SELECT `clients`.* FROM `clients` WHERE (created_at BETWEEN '2012-09-22 16:30:04' AND '2012-08-23')
 => []

此外,我想使用.day方法将此记录分组到数组数组中, 我的意思是,如果我有10条记录,我想把在同一天创建的记录分组成分离的数组!

2 个答案:

答案 0 :(得分:5)

Client.
  where(created_at: 30.days.ago..Date.current).
  group_by{|u| u.created_at.to_date}

您可以在where之间传递一系列您想要结果的值(对于包含范围与排他范围,请查看.....之间的差异。)

此外,您可以通过调用group_by来对结果进行分组,这将采用一种方法来调用,即.group_by(&:created_at)或一个块,如我的示例所示。我使用了一个完整的块,因为您希望按日期而不是按特定时间戳分组结果。如果您实际想要一个月中的某一天而不是完整日期,您也可以拨打.group_by{ |u| u.created_at.day},但日期对我来说似乎更有用。

答案 1 :(得分:1)

我相信你想要的是(注意前与现在相比):

Client.where('created_at BETWEEN ? AND ?', 30.days.ago.utc, Time.now.utc)