2014-10-06 3 views
0

В приложении rails мне нужно вернуть коллекцию ActiveRecord, содержащую несколько столбцов, но только один столбец должен быть уникальным. Существует область по умолчанию, которая не является уникальным значением.Как выбрать уникальные значения из одного столбца с областью по умолчанию, возвращая несколько столбцов

По умолчанию Область

default_scope { order('executed_at DESC') } 

Текущий запрос БЕЗ уникально: условия.

Search.where(organization_id: @my_array_of_ids) 
     .executed_after(from_date_time) 
     .limit(100) 
     .pluck(:terms) 

выполненный_after (from_date_time) также является областью. Как я могу изменить вышеуказанный запрос для возврата уникальных терминов без использования метода .uniq? Я хочу, чтобы это был единственный оператор SQL.

+0

Помогает ли это? http://stackoverflow.com/questions/16913969/postgres-distinct-but-only-for-one-column –

ответ

0

Я также нашел это:

Convert SQL query to Active Record query in Rails 4

Обратите внимание на Model.distinct (: колонка)

EDIT:

Я предполагаю, что это что-то вроде этого, но я d требуется дополнительная информация:

Search.distinct(:terms).select(:executed_at) 
.where(organization_id: @my_array_of_ids) 
    .executed_after(from_date_time) 
    .limit(100) 
    .group(:executed_at) 
+0

Это дает мне сообщение об ошибке 'PG :: GroupingError: ОШИБКА: столбец "searches.executed_at" должен появляются в предложении GROUP BY или используются в агрегированной функции. Я думаю, что это имеет какое-то отношение к области по умолчанию. – cheeseandpepper

+0

Это ошибка SQL, вам нужно добавить столбец в предложение group by с помощью .group (: execute_at) ' –

+0

Я пробовал это, проблема в том, что execute_at - это метка времени со всеми уникальными результатами. Мне все равно, уникальны они или нет; только если термины уникальны. – cheeseandpepper