Dies ist wahrscheinlich ein Standardproblem, und ich habe einige andere greatest-n-per-group Antworten ausgetippt, aber bisher konnte mein aktuelles Problem nicht lösen.Postgres Gruppe nach Spalten und innerhalb der Gruppe Wählen Sie andere Spalten nach max Aggregat
A B C
+----+-------+ +----+------+ +----+------+-------+
| id | start | | id | a_id | | id | b_id | name |
+----+-------+ +----+------+ +----+------+-------+
| 1 | 1 | | 1 | 1 | | 1 | 1 | aname |
| 2 | 2 | | 2 | 1 | | 2 | 2 | aname |
+----+-------+ | 3 | 2 | | 3 | 3 | aname |
+----+------+ | 4 | 3 | bname |
+----+------+-------+
In Englisch, was ich bewerkstelligen möchte:
- Für jede c.name, wählen Sie den neuesten Eintrag auf der Basis der Startzeit in a.Starten
Die SQL ich habe versucht, ist die folgende:
SELECT a.id, a.start, c.id, c.name
FROM a
INNER JOIN (
SELECT id, MAX(start) as start
FROM a
GROUP BY id
) a2 ON a.id = a2.id AND a.start = a2.start
JOIN b
ON a.id = b.a_id
JOIN c
on b.id = c.b_id
GROUP BY c.name;
Es schlägt mit Fehlern wie zum Beispiel:
Um nützlich zu sein, brauche ich wirklich die IDs aus der Abfrage, kann aber nicht gruppieren, da sie eindeutig sind. Hier ist ein Beispiel von Ausgang ich für den ersten Fall lieben würde oben:
+------+---------+------+--------+
| a.id | a.start | c.id | c.name |
+------+---------+------+--------+
| 2 | 2 | 3 | aname |
| 2 | 2 | 4 | bname |
+------+---------+------+--------+
Hier ist ein Sqlfiddle
Bearbeiten - entfernt zweiter Fall
'GROUP BY cn ame; 'ist nicht erforderlich. –
Ich würde vorschlagen, dass Sie die zweite Anfrage von dieser Frage entfernen (bevor jemand sie beantwortet), akzeptieren Sie die Antwort mit 'distinct on' und stellen Sie eine andere Frage für den zweiten Teil. Stack Overflow bietet kein zusätzliches Guthaben. –