23rd Jun 2022 2 Leseminuten Wie wählt man die erste Zeile in einer Gruppe aus? Agnieszka Kozubek-Krycuń PostgreSQL Inhaltsverzeichnis SELECT DISTINCT ON mit ORDER BY SELECT DISTINCT Oft möchte man eine einzelne Zeile aus jeder GROUP BY-Gruppe auswählen. PostgreSQL hat eine Anweisung speziell dafür: SELECT DISTINCT ON. Nehmen wir an, ich möchte einen Wetterbericht für jeden Ort auswählen. location time report Ottawa 2014-05-15 8:00 sunny 2014-05-15 11:00 cloudy 2014-05-15 15:00 rainy Warsaw 2014-05-15 8:00 overcast 2014-05-15 11:00 sunny 2014-05-15 15:00 rainy SELECT DISTINCT ON (location) location, time, report FROM weather_reports; Die Abfrage ruft für jeden Ort einen Wetterbericht ab. Sie können mehrere Ausdrücke in der SELECT DISTINCT ON-Anweisung verwenden. SELECT DISTINCT ON (creation_date_week, resource_id) id, creation_date, date_trunc('week', creation_date) creation_date_week, resource_id FROM backup_data; Für jede Ressource ruft die Abfrage eine einzelne Datensicherung für jede Woche ab. SELECT DISTINCT ON mit ORDER BY Das unverzierte SELECT DISTINCT ON wählt eine Zeile für jede Gruppe aus, aber Sie wissen nicht, welche der Zeilen ausgewählt wird. Jede Ausführung der Abfrage kann unterschiedliche Zeilen zurückgeben. Verwenden Sie die ORDER BY-Klausel, wenn Sie eine bestimmte Zeile auswählen möchten. SELECT DISTINCT ON (location) location, time, report FROM weather_reports ORDER BY location, time DESC; Die Abfrage ruft den aktuellsten Wetterbericht für jeden Ort ab. SELECT DISTINCT ON (creation_date_week, resource_id) id, creation_date, date_trunc('week', creation_date) creation_date_week, resource_id FROM backup_data ORDER BY creation_date_week, resource_id, creation_date DESC; Für jede Ressource wählt die Abfrage die neuesten Sicherungsdaten in jeder Woche aus. Die SELECT DISTINCT ON-Ausdrücke müssen am Anfang der ORDER BY-Klausel wiederholt werden. Sie können zusätzliche Ausdrücke nach ihnen hinzufügen. SELECT DISTINCT Eine verwandte Klausel ist die Standardklausel SELECT DISTINCT. Mit der Standardklausel werden doppelte Zeilen eliminiert. SELECT DISTINCT ON eliminiert Zeilen, die die angegebenen Ausdrücke duplizieren. Tags: PostgreSQL