Rails Query Table,用于在一天中的特定时间之间创建的所有记录

时间:2018-11-28 07:50:50

标签: ruby-on-rails postgresql ruby-on-rails-5

我有一个带有PGSQL数据库的Rails应用程序,允许用户添加帖子。 出于分析目的,我需要查询每天下午2点至下午4点之间创建的记录并显示该计数。

我可以获取所有结果并进行迭代,但是我认为这不是处理问题的有效方法,因为我每天希望获得1000条记录。

2 个答案:

答案 0 :(得分:0)

为此使用PostgreSQL的EXTRACT。您可以参考更多的日期时间函数here

您的查询应类似于:

Post.where("EXTRACT(hour FROM created_at) BETWEEN 14 AND 16")

如果只对计数感兴趣,请添加一个.count

请记住时区,如果您要在数据库中的UTC中保存日期时间,但要查找本地时区中14到16之间的帖子,则必须稍微改变小时数(或使用{{ 1}}(来自我提到的用于DST的链接)。

答案 1 :(得分:0)

class Post < ApplicationRecord
  scope :todays_latest_posts, { where("(HOUR(created_at) BETWEEN ? AND ?) AND DATE(created_at) = ?", 14, 16, Date.today) }
end

查询每天下午2点至下午4点之间创建的记录,并显示=>

  

Post.todays_latest_posts

SQL查询将会

SELECT  `posts`.* FROM `posts` WHERE ((HOUR(created_at) BETWEEN 14 AND 16) AND DATE(created_at) = '2018-11-24') LIMIT 11

输出=>

=> #<ActiveRecord::Relation [#<post id: 112, title: nil, .... created_at: "2018-11-24 11:31:35", updated_at: "2018-11-24 11:31:36">, [], ...]>

计数=>

Post.todays_latest_posts.count