Sto provando a scrivere una query in Postgresql che estrae un insieme di dati ordinati e li filtra per un campo distinto. Devo anche prelevare diversi altri campi dalla stessa riga della tabella, ma devono essere esclusi dalla valutazione distinta. Esempio:Uso di una clausola DISTINCT per filtrare i dati, ma tirare ancora altri campi che non sono DISTINCT
SELECT DISTINCT(user_id) user_id,
created_at
FROM creations
ORDER BY created_at
LIMIT 20
ho bisogno del user_id
essere DISTINCT
, ma non importa se la data created_at è unica o meno. Poiché la data created_at viene inclusa nella valutazione, sto ottenendo il duplicato user_id
nel mio set di risultati.
Inoltre, i dati devono essere ordinati in base alla data, in modo da utilizzare DISTINCT ON
non è un'opzione qui. È necessario che il campo DISTINCT ON
sia il primo campo nella clausola ORDER BY
e che non fornisca i risultati che cerco.
Come utilizzare correttamente la clausola DISTINCT
ma limitare l'ambito a un solo campo mentre si selezionano altri campi?
Il concetto di 'DISTINCT' si applica intrinsecamente a tutte le colonne selezionate perché altrimenti ci sarebbe un'aggregazione inerente ... da qui la funzione' GROUP'. Che tipo di set di risultati stai guardando? Puoi dare un esempio di ciò che i dati potrebbero contenere e quali risultati desideri? – Matthew
La cosa interessante (e non correlata alla risposta) è che ho già eseguito il suddetto tentativo di avere "DISTINCT (column1), column2" su una singola colonna. Tuttavia, i database lo analizzano come "DISTINCT column1, column2" - fortunatamente per te ha restituito risultati errati - altrimenti ti avrebbe potuto morsi molto più tardi (la prima volta che l'ho visto era in un database di produzione). – Unreason
"i dati devono essere ordinati entro la data" - ** quale ** data? La prima data_satificata per ogni utente? L'ultimo? Qualcos'altro? –