2013-09-01 1 views
1

Все дубликаты, которые появляются позже (заказ rational в этом случае), должны быть удалены. Но следующий запрос не работает:Postgresql отличается приоритетом

SELECT DISTINCT ON(postcards.id) postcards.id, postcards.title, rational 
FROM 
(
SELECT postcards.id, postcards.title, 
some_complex_condition as rational 
FROM postcards 
ORDER BY rational 
) as postcards 

Я надеялся, что это зависит от заказа, но это не так. Кажется, нужно установить некоторый приоритет на DISTINCT ON. Можно ли это сделать в Postgresql?

ответ

2

Вы должны использовать колонки внутри distinct on в order by.

select distinct on (postcards.id) 
    postcards.id, postcards.title, rational 
from 
(
    select 
     postcards.id, postcards.title, 
     some_complex_condition as rational 
    from postcards 
) as postcards 
order by postcards.id, rational 

От PostgreSQL documentation:

отчетливого выражения (ов) должен совпадать с крайней левой ORDER BY выражения (ов). ORDER BY пункта, как правило, содержит дополнительное выражения (ы), которые определяют желаемый приоритет строк в пределах каждые отдельный ПО группе

Так distinct on будет использовать набор записи, заказанные id, rational и принять первую запись в наборе записей для каждого id ,

+0

спасибо! – tiktak

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