【问题标题】:Select Range of records using created_at使用 created_at 选择记录范围
【发布时间】:2012-08-23 16:35:44
【问题描述】:

我想通过 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 条记录,我想将在同一天创建的记录分组到单独的数组中!

【问题讨论】:

  • 您是否对所有回答您问题的人(包括刚刚删除他/她回复的人)投了反对票?还是别人?

标签: sql ruby-on-rails ruby activerecord


【解决方案1】:
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},但日期对我来说似乎更有用。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 2018-06-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      相关资源
      最近更新 更多