PostgreSQL - Syntax "DISTINCT ON" und "GROUP BY"

Ich habe festgestellt, dass eine Datenbankabfrage unerwartete Ergebnisse zurückgibt, wenn ich "DISTINCT ON" und "GROUP BY" nicht ordnungsgemäß verwende.

Ich hoffe, jemand kann mich klarstellen. Die eigentliche Abfrage ist ziemlich komplex, daher werde ich sie kurz erklären:

Ich habe eine Tabelle / innere Abfrage, die aus einer Objekt-ID und einem Zeitstempel besteht:

CREATE TABLE test_select ( object_id INT , event_timestamp timestamp );
COPY test_select (object_id , event_timestamp) FROM stdin (DELIMITER '|');
1           | 2013-01-27 21:01:20
1           | 2012-06-28 14:36:26
1           | 2013-02-21 04:16:48
2           | 2012-06-27 19:53:05
2           | 2013-02-03 17:35:58
3           | 2012-06-14 20:17:00
3           | 2013-02-15 19:03:34
4           | 2012-06-13 13:59:47
4           | 2013-02-23 06:31:16
5           | 2012-07-03 01:45:56
5           | 2012-06-11 21:33:26
\.

Ich versuche, eine eindeutige ID auszuwählen, die nach dem Zeitstempel auf der Rückseite chron geordnet / dedupliziert ist

daher sollten die Ergebnisse [4, 1, 3, 2, 5] sein

Ich denke das tut was ich brauche (es scheint):

SELECT object_id  
FROM test_select 
GROUP BY object_id 
ORDER BY max(event_timestamp) DESC
;

Zu Test- / Prüfungszwecken möchte ich manchmal das Zeitstempelfeld einschließen. Ich kann nicht scheinen, herauszufinden, wie man ein anderes Feld mit dieser Abfrage einschließt.

Kann jemand auf eklatante Probleme in meinem oben stehenden SQL-Code hinweisen oder Vorschläge dazu, wie die Auditing-Informationen eingefügt werden sollen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage