0

Использование Active Record, Как сделать заказ на 2 колонки (created_at, просмотров):Как заказать записи по created_at последние 3 дня, а затем на другой колонке, используя рельсы [PostGreSQL]

первая: Записи, созданные в последние 3 дня

второе: все после этого должны быть заказаны только видом

для того, чтобы получить результат, похожий на этот (пожалуйста, игнорирующие синтаксис даты):

[[2017-02-15 00:00:00 UTC, 150]], 
[2017-02-14 00:00:00 UTC, 88], 
[2017-02-13 00:00:00 UTC, 12]], 
[2016-01-14 00:00:00 UTC, 99999]], 
[2016-03-10 00:00:00 UTC, 3000]], 
[2016-11-07 00:00:00 UTC, 2000]], 
[2016-10-21 00:00:00 UTC, 1000]], 
[2016-09-03 00:00:00 UTC, 100]], 
[2016-05-18 00:00:00 UTC, 10]] 

Я нашел «date_trunc» в Postgresql, но мне нужны последние 3 дня только один раз, а затем просто рассмотрим количество просмотров.

Какие варианты у меня есть, в идеале, используя только один запрос?

Благодаря

ответ

0

Вы можете сделать созданы дату между текущей датой и текущей датой - 3.days. Здесь вы получите все записи, созданные за последние 3 дня.

current_date = Time.zone.now 
before_date = current_date - 3.days 

Ex: where(:created_at => before_date.beginning_of_day.. current_date.end_of_day).order(created_at ASC, views DESC) 
+0

Спасибо, но это только показывает последние 3 дня. Все записи должны быть показаны, с теми, которые были созданы за последние 3 дня вверху. – Simon

2

Вот ответ, возможно, не один запрос. Но, Он выполняет ваши требования.

Я принимаю User модель в качестве примера.

Прежде всего, получите пользователей, которые создали дату за последние 3 дня.

users = User.where(:created_at => (Date.today - 3.days)..Date.today)

Теперь, получить пользователи, у которых создана дата не в последние 3 дня, заказ по количеству просмотров по убыванию

users2 = (User.where.not(:created_at => (Date.today - 3.days)..Date.today)).order('views desc') 

Теперь, объединив два результата с помощью (+)

Рельсы Объекты активной записи могут быть объединены с использованием (+)

users3 = users + users2 дает ваш результат.

+0

Спасибо, Сраван, что работает. Тем не менее, я все еще ищу решение для одного запроса. – Simon

+0

Да, я также буду стараться. Вы можете принять его, если найдете его полезным. – Sravan

+0

Я одобрил его как полезный, спасибо :-) – Simon

 Смежные вопросы

  • Нет связанных вопросов^_^