我有一个带有PGSQL数据库的Rails应用程序,允许用户添加帖子。 出于分析目的,我需要查询每天下午2点至下午4点之间创建的记录并显示该计数。
我可以获取所有结果并进行迭代,但是我认为这不是处理问题的有效方法,因为我每天希望获得1000条记录。
答案 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