Ergebnisse zwischen zwei Daten in PostgreSQL erhalten
Ich habe die folgende Tabelle:
+-----------+-----------+------------+----------+
| id | user_id | start_date | end_date |
| (integer) | (integer) | (date) | (date) |
+-----------+-----------+------------+----------+
Felder start_date
und end_date
halten Datum Werte wie YYYY-MM-DD
.
Einen Eintrag aus dieser Tabelle kann wie folgt Aussehen: (1, 120, 2012-04-09, 2012-04-13)
.
Ich muss eine Abfrage schreiben, die holt alle Ergebnisse passend zu einem bestimmten Zeitraum.
Das problem ist, dass wenn ich will, um Ergebnisse zu Holen aus 2012-01-01
zu 2012-04-12
bekomme ich 0 Ergebnisse, obwohl ein Eintrag mit start_date = "2012-04-09"
und end_date = "2012-04-13"
.
InformationsquelleAutor der Frage Psyche | 2012-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Datetime-Funktionen ist der entsprechende Abschnitt in der Dokumentation.
InformationsquelleAutor der Antwort Marco Mariani
Angenommen, Sie möchten alle "überlappende" Zeiträume, d.h. alle, die mindestens einen Tag gemeinsam.
Versuchen, sich vorzustellen Zeiträume auf einer geraden Zeit, die Linie und bewegen Sie Sie vor Ihren Augen und Sie sehen die notwendigen Voraussetzungen.
Dies ist manchmal schneller für mich als
OVERLAPS
- das ist die andere gute Weise, es zu tun (wie @Marco bereits zur Verfügung gestellt).Beachten Sie die subtilen Unterschied (pro Dokumentation):
Fett-Hervorhebung von mir.
Leistung
Für große Tabellen die richtige index kann helfen, Leistung (viel).
Eventuell mit einer anderen (führenden) index-Spalte, wenn Sie zusätzliche selektive Bedingungen.
Beachten Sie die umgekehrte Reihenfolge der beiden Spalten. Ausführliche Erklärung:
InformationsquelleAutor der Antwort Erwin Brandstetter
hatte gerade die gleiche Frage, und auf diese Weise beantwortet, wenn dies helfen könnte.
InformationsquelleAutor der Antwort Chris
Eine Abfrage arbeiten in irgendwelchen locale-Einstellungen, sollten die Formatierung des Datum selbst:
InformationsquelleAutor der Antwort vyegorov
Blick auf die Termine, für die es nicht funktioniert-jene, wo der Tag weniger als oder gleich 12 ist -- Frage ich mich, ob es beim Parsen der Daten als YYYY-DD-MM-format?
InformationsquelleAutor der Antwort Edmund
Nichts für ungut, aber um zu überprüfen, die für die Ausführung der sql habe ich ausgeführt, einige der oben erwähnten solutiona pgsql.
Lassen Sie mich teilen Sie Ihre Statistik der top 3 Lösungsansätze, auf die ich stoße.
1) Nahm : 1.58 MS Avg
2) Nahmen : 2.87 MS Avg
3) Nahm : 3.95 MS Avg
Nun versuchen, diese :
Nun diese Lösung fand : 1.61 Avg.
Und beste Lösung ist die 1., die vorgeschlagen, dass durch marco mariani
InformationsquelleAutor der Antwort rxpande
InformationsquelleAutor der Antwort user9251288
Verwenden Sie den date-Teil-fetching-Methode:
InformationsquelleAutor der Antwort boopathiraja