У меня следующий запрос:
select "houses"."id",
"houses"."uuid",
COUNT(1) OVER() as full_count from "houses"
CROSS JOIN LATERAL jsonb_array_elements(houses.types) house_types
inner join "hoods" on "hoods"."id" = "houses"."hood_id" and "hoods"."owner_id" = 2
inner join "groups" on "groups"."hood_id" = "hoods"."id" and "groups"."manager_id" = 54
where house_types->>'type' = 'big'
group by "houses"."id", "houses"."uuid"
order by lower(houses.name) asc
limit 20
Что правильно дает мне первые 20 домов, которые имеют тип 'большой', которые находятся в капоте, для которого owner_id равен 2, а в каком капоте есть связанная группа, а для менеджера - 54.
Теперь проблема в том, что иногда у меня будут дома с одинаковыми названиями, и я хочу просто оставить один из них и убрать остальные. Так, например:
Если таблица моего дома выглядит так:
id, types, name
1, [{ type: 'rating' }], 'white house'
2, [{ type: 'rating' }], 'white house'
3, [{ type: 'rating' }], 'red house'
Я бы просто получил строки с идентификаторами 1 и 3.
Какой хороший способ сделать это в PostgreSQL при условии, что к запросу можно применить как смещения, так и ограничения, и я хочу удалить дубликаты.