【问题标题】:ActiveRecord count of distinct days from created_at?与 created_at 不同天数的 ActiveRecord 计数?
【发布时间】:2013-01-27 20:08:37
【问题描述】:

如果需要查询字段(理想情况下,单独使用 ActiveRecord),是否可以根据字段值检索不同记录的计数?

例如,以下基于“created_at”字段返回唯一记录的计数:

Record.count('created_at', :distinct => true)

但是,是否有可能以类似的方式根据“created_at”字段计算唯一天数?

一个天真的 ActiveRecord 示例来解释我的意图是:

Record.count('created_at'.day, :distinct => true)

(我知道字符串“created_at”不是“时间”,但这是我想询问 ActiveRecord 的那种查询。)

【问题讨论】:

    标签: ruby ruby-on-rails-3 activerecord


    【解决方案1】:

    您需要对记录进行分组。例如

    Record.group('DATE(created_at)').count('created_at')
    

    告诉您在每个特定日期创建的行数,或

    Record.group('DAYOFWEEK(created_at)').count('created_at')
    

    会告诉您在一周中的每一天创建的行数。

    请注意,使用通常的活动记录设置,这将在 UTC 中进行日期计算,如果您想在特定时区进行计算,则必须将该转换添加到组语句中。

    【讨论】:

    • 好答案,我只想补充一点,不分组也可以这样做:Record.count('DATE(created_at)', :distinct => true)
    • @FrederickCheung 这对数据库级别来说很棒,非常感谢。当然让我走上正确的道路。这些示例当然适用于MySQL's Date And Time Functions,这让我看到SQLite's Date And Time Functions(例如)有不同的版本,这很高兴知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    相关资源
    最近更新 更多