2016-05-25 3 views
1

Meine Forderung Erstbestellung entsprechen unterscheidet Aufzeichnungen zu erhalten und umERROR: SELECT ON Ausdrücke DISTINCT muss durch Ausdrücke

User.joins('INNER JOIN report_posts ON posts.id = report_posts.post_id').select('DISTINCT ON (report_posts.post_id) posts.id as report_posts.id as reported_id, report_posts.reported_at').order('report_posts.reported_at desc') 

Ich weiß, das in postgresql nicht möglich ist, habe ich schon gelesen dieses Postgresql DISTINCT ON with different ORDER BY

Ich möchte seine Lösung, wie kann ich das tun, seinen alternativen Weg?

+0

Mit GROUP BY auf all Spalten unterschiedliche Werte zu erhalten. – Pholochtairze

+0

@Pholochtairze das ist nicht korrekt, DISTINCT ist die richtige Aussage zu verwenden. MySQL implementiert Gruppierung falsch, was wahrscheinlich die Verwirrung verursacht. Siehe http://StackOverflow.com/a/1777448/1087866 –

Antwort

3

Sie benötigen die DISTINCT Spalte in Ihrer Bestellung enthalten:

.order('report_posts.post_id, report_posts.reported_at desc') 
+0

Was ist, wenn ich einen 'CASE ... AS some_field' zum Select-Bereich hinzugefügt habe und ich werde mich darauf festlegen? Ich habe 'some_field' auf' distinct on' sowie auf 'select' und' order by' gesetzt, aber den gleichen Fehler bekommen –