Ich habe ein modales Notifications und ein Benutzermodal, wo Benutzer viele Benachrichtigungen hat und die Benachrichtigungen zwischen Benutzern gesendet werden. Ich brauche eine Funktion, um die neueste Benachrichtigung von jedem Benutzer zu erhalten, und sie nach ihren Zeitstempeln sortiert zurückzugeben.Rails wählen distinct und Reihenfolge von den letzten
habe ich versucht, SELECT DISTINCT .. ORDER BY mit:
@notifications = Notification.select("DISTINCT(notifier_id, created_at)").order('created_at DESC')
, die diese SQL erzeugt: SELECT DISTINCT(notifier_id, created_at) FROM "notifications" ORDER BY "notifications"."created_at" DESC, created_at DESC)
aber ich habe den Fehler: SELECT DISTINCT, ORDER BY expressions must appear in select list
created_at
erscheint in der Auswahlliste, also, was ist das Problem?
zu diesem Beitrag Basierend: PG::Error: SELECT DISTINCT, ORDER BY expressions must appear in select list
I SELECT versucht mit ... GROUP BY .. ORDER BY:
@notifications = Notification.select("notifier_id").group("notifier_id").order("MAX(created_at)")
, die diese SQL erzeugt: SELECT "notifications"."notifier_id" FROM "notifications" GROUP BY notifier_id ORDER BY "notifications"."created_at" DESC, MAX(created_at)
aber jetzt das ich Fehler: column "notifications.created_at" must appear in the GROUP BY clause or be used in an aggregate function
Ich verwende eine Aggregatfunktion, also worum geht es bei dem Fehler?
UPDATE:
Mit diesem Code:
@notifications = Notification.select("DISTINCT ON (created_at) created_at, notifier_id").order('created_at DESC')
ich eine Liste aller Nachrichten zurück, anstatt nur die neuesten von jedem Sender.
Die Fehlerausgabe, die Sie bekommen, sagt Ihnen im Grunde, was Sie beheben müssen. Hast du das versucht? –
Können Sie erklären, was die Grundlösung ist? – Cbas
Ihre zweite 'GROUP BY' Abfrage ist ein bisschen chaotisch. Könnten Sie einige Beispieldaten zusammen mit dem gewünschten Ergebnis veröffentlichen? Dies ist eher ein Postgres-Problem als ein Ruby-Problem. –