【问题标题】:RoR: Counting records from day while querying datetimeRoR:在查询日期时间时从一天开始计算记录
【发布时间】:2011-08-29 15:47:28
【问题描述】:

我正在尝试为过去 15 天创建一个循环,以计算每天的记录数。

所以@records 应该是过去 15 天的计数数组。

但是,记录将日期存储为日期时间(如您所知),我试图引用一天内的任何时间。

@records = []

      15.times do |i|
        bar =  Records.all.count( 
          :type => 'large',
          :created_at => ((i-1).days.ago..i.days.ago)
          )
        @records << bar
      end

想法?谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 datetime


    【解决方案1】:
    Record.where("date(created_at) > ?", 15.days.ago).group("date(created_at)").count
    

    应该按天计算记录。

    样本输出:

     {"2011-07-02"=>4,
     "2011-07-04"=>5,
     "2011-07-05"=>16,
     "2011-07-06"=>12,
     "2011-07-11"=>19}
    

    【讨论】:

    • 想为 Arel 写一些文档吗?也许是一堆 Arel 单线?
    • 实际上是我从 Arel 官方文档中偷的 :D goo.gl/ca9nJ
    • 感谢您的回复,但这不包括我需要的 NULL。您将如何 .group() 进行迭代?
    • 我认为您还应该将 nil 作为 null 值的键之一。迭代是什么意思?
    • 我希望输出是一个包含 15 个计数的数组,过去 15 天中的每一天一个计数。那么我应该在您的解决方案中的哪个位置添加一个条件以将“created_at”属性限制为过去 15 天?
    【解决方案2】:

    您可以使用 SQL 进行计数,而无需实例化大量 Record 对象(使用内存/时间)

    ActiveRecord::Base.connection.select_rows('SELECT DATE(created_at) AS d, COUNT(*) AS c FROM my_records_table GROUP BY DATE(created_at)')
    

    这会给你一个数组数组:

    > pp ActiveRecord::Base.connection.select_rows('SELECT DATE(created_at) AS d, COUNT(*) AS c FROM my_records_table GROUP BY DATE(created_at)')
    [["2011-06-23", "326"],
     ["2011-06-24", "337"],
     ["2011-06-25", "334"],
     ["2011-06-26", "353"],
     ["2011-06-27", "210"],
     ["2011-06-28", "330"],
     ["2011-06-29", "331"],
     ["2011-06-30", "338"],
     ["2011-07-01", "335"],
     ["2011-07-02", "366"],
     ["2011-07-03", "320"],
     ["2011-07-04", "338"],
     ["2011-07-05", "338"],
     ["2011-07-06", "299"],
     ["2011-07-07", "326"],
     ["2011-07-08", "314"],
     ["2011-07-09", "331"],
     ["2011-07-10", "335"],
    

    ...但我刚刚看到了 dexter 的回答,这好多了:)

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2019-11-05
      • 2022-10-25
      • 2020-04-12
      • 2023-03-28
      相关资源
      最近更新 更多