Heim >Datenbank >MySQL-Tutorial >Wie identifiziere ich überlappende Datumsbereiche in PostgreSQL für die Mitgliedschaft im Spielerteam?
Problem
Ein Benutzer möchte eine Liste von Spielern abrufen, die zu einem gehörten bestimmtes Team innerhalb eines bestimmten Jahresbereichs. Die ursprünglich vorgeschlagene Abfrage lautet wie folgt:
SELECT * FROM contract JOIN team USING (name_team) JOIN player USING(name_player) WHERE name_team = ? AND DATE_PART('YEAR',date_join)>= ? AND DATE_PART('YEAR',date_leave)<= ?
Diese Abfrage identifiziert jedoch überlappende Datumsbereiche nicht effektiv.
Richtige Lösung
An Um überlappende Datumsbereiche genau zu bestimmen, muss die Abfrage geändert werden, um die folgenden Kriterien zu berücksichtigen:
Optimierte Abfrage
Die folgende Abfrage liefert eine genauere Lösung:
SELECT DISTINCT name_player FROM contract WHERE name_team = ? AND (date_join, COALESCE(date_leave, CURRENT_DATE)) OVERLAPS (date '2009-01-01', date '2010-01-01'); -- upper bound excluded
Erklärung
Zusätzliche Überlegungen
Das obige ist der detaillierte Inhalt vonWie identifiziere ich überlappende Datumsbereiche in PostgreSQL für die Mitgliedschaft im Spielerteam?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!