2015-09-14 5 views
0

так, мне нужно сделать запрос, который будет работать так:Rails сложный запрос первый восходящий, затем нисходящий

первых, он будет отображать элементы, которые имеют дату атрибут «END_DATE» больше, чем текущая дата, и атрибут «release_date» ниже текущей даты (пример: сегодня - 15 сентября, end_date - 20-е, а релиз - 12-й). Эти элементы являются «активными».

После отображения этих элементов, я хотел бы отображать прошлые элементы по убыванию. Прошедшие элементы - это те, у кого «end_date» ниже текущей.

Я был бы признателен за любую помощь в создании этого запроса. Благодаря!

P.S. Я использую PostgreSQL, Ruby 2.2.0 и Rails 4.2.1

+0

Ваш вопрос неясен. Если вы выберете строки с 'end_date> current_date', нет элементов с' end_date zwippie

ответ

0

Одним из вариантов является создание двух запросов, а затем объединение объектов ActiveRecord :: Relation. Возможно, это не так эффективно (2 вопроса), но легко понять и реорганизовать.

@relevant_elements = Element.where('end_date > :current_date AND release_date < :current_date', current_date: Date.today).order('end_date ASC') 
@past_elements = Element.where('end_date < :current_date', current_date: Date.today).order('end_date DESC') 
@elements = @relevant_elements.merge(@past_elements) 
+0

В результате массив без элементов :( – figdig

+0

Проверяйте каждый запрос самостоятельно. Также предоставляйте schema.rb. Может быть, мы не понимаем друг друга. –

0

Вы можете achive это в один запрос с использованием row_number():

select *, 
    case when end_date >= current_date then row_number() over (order by end_date) 
    else row_number() over (order by end_date desc) end as rn 
from the_table 
order by end_date < current_date, rn; 

SqlFiddle.

+0

Я получаю эту синтаксическую ошибку, когда я изменил таблицу_таблицы на имя таблицы: PG: : SyntaxError: ERROR: подзапрос должен возвращать только один столбец LINE 1: SELECT «элементы». * FROM «элементы» WHERE (выберите *, case when end ... – figdig

+0

Вы не должны размещать запрос в **, где ** Запустите его в целом. – klin

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