Tenho o seguinte SQL, gerado a partir do ActiveRecord no Rails 4 (parcialmente com a gem Geocoder)
O problema é que, embora DISTINCT
seja usado, esperamos obter apenas itens exclusivos, os itens retornaram duplicados. O motivo da duplicação é que eles podem ocorrer em várias lojas ou marcas (é por isso que adicionei o distinto, o que não ajuda muito)
SELECT DISTINCT items.*,
<calculate distance from shops coordinates> AS distance,
<calculate bearing> AS bearing,
items.*,
shops.id AS closest_shop_id
FROM "items"
INNER JOIN "collection_items" ON "collection_items"."item_id" = "items"."id"
INNER JOIN "galleries" ON "galleries"."id" = "collection_items"."gallery_id"
LEFT OUTER JOIN brands ON brands.id = galleries.galleriable_id
AND galleries.galleriable_type = 'Brand'
INNER JOIN shops ON shops.brand_id = brands.id
LEFT OUTER JOIN shops AS othershops ON galleries.galleriable_id = othershops.id
AND galleries.galleriable_type = 'Shops'
WHERE <shops coordinate are within some bounds>
ORDER BY updated_at DESC,
distance ASC LIMIT 10
*as coisas <
>
são simplificações de cálculo para tornar a consulta menos confusa
Como posso fazer esta consulta retornar itens distintos?
Atualizar:
Verificando com o PGAdmin, noto que os resultados são distintos, mas em tudo, veja os dados
Portanto, para fazer esses distintos, preciso decidir qual linha ignorar.
Existe uma maneira de pegar apenas a primeira ocorrência (pelo pedido específico) da coluna id?
de tal forma que levará a primeira linha de id 23171?
Com o PostgreSQL, você deve usar o seguinte se as linhas não forem idênticas considerando todas as colunas: