Rails Query Table для всех записей, которые были созданы между определенным временем всех дней - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть приложение rails с базой данных PGSQL, которое позволяет пользователям добавлять сообщения.В целях аналитики мне нужно запрашивать записи, которые создавались между 2 и 4 часами дня каждый день, и отображать это количество.

Я мог бы получить все результаты и просмотреть его, но я не думаю, что это эффективный способидти о вещах, потому что я ожидаю тысячи записей каждый день.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018
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
0 голосов
/ 28 ноября 2018

Используйте для этого PostgreSQL EXTRACT.Вы можете обратиться к дополнительным функциям даты и времени здесь .

Ваш запрос должен выглядеть следующим образом:

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

добавить .count, если вас интересует только подсчет.

Пожалуйста, помните о часовых поясах: если вы сохраняете даты в формате UTC в базе данных, но ищете записи между 14-16 в местном часовом поясе, вам придется немного сместить часы (или используйте AT TIME ZONE по ссылке, которую я упомянул, с учетом DST).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...