2017-10-18 1 views
-1

Ich muss alle Daten zwischen einem bestimmten (Rezept) Startdatum und Enddatum (als Teil einer viel größeren Abfrage) auflisten.MySQL - Liste alle Termine zwischen zwei angegebenen Daten mit Sitzungsvariablen

Table name: patientprescription 
Start date field: prescriptionstartdate 
End date field: prescriptionenddate 

Ich versuche, Sitzungsvariablen zu verwenden. Aber ich finde es schwierig, den Anfangswert in der Variablen zu setzen. Die erste Ausführung führt zu keinem Wert, aber die nachfolgende Ausführung gibt mir das korrekte Ergebnis (weil die erste Ausführung die Variablen setzt).

mein Bedürfnis zu vereinfachen, hier ist der Kern meiner Anfrage:

SELECT 
    @gg := DATE_ADD (@gg, INTERVAL 1 DAY) AS rxDate 
FROM patientprescription AS rx 
    JOIN (SELECT @gg := @hh FROM t1) AS v1 ON @hh := rx.prescriptionstartdate 
WHERE 
    rx.id = 8 
    AND @gg <= rx.prescriptionenddate; 

t1 einige Tabelle mit wenigen Datensätzen ist.

Um die Variablen zurück nach Ausführung zurück:

SELECT @gg := NULL, @hh := NULL; 
+0

Mögliches Duplikat [Wie zwischen zwei Daten in MySQL SELECT-Abfrage Liste der Daten bekommen] (https://stackoverflow.com/questions/9295616/how-to-get-list-of-dates-between -two-dates-in-mysql-select-query) – GurV

+0

Vielen Dank für den Hinweis auf den Link. Ich sehe es mir an. Außerdem ist es möglich, das gleiche Ergebnis mit der obigen Abfrage mit Variablen zu haben? –

+0

Noch kämpfen? Siehe https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-very-simple-sql-query – Strawberry

Antwort

0

ich mit variabler dieses erhalten verwaltet.

SELECT 
    @gg := DATE(DATE_ADD (rx.prescriptionstartdate, INTERVAL @hh DAY)) rxDateNext, 
    @hh := @hh + 1 AS adderStmt 
FROM patientprescription rx 
    JOIN (SELECT @hh := 0 FROM t1) AS v1 
WHERE 
    rx.id = 8 
    AND @hh <= DATEDIFF(rx.prescriptionenddate, rx.prescriptionstartdate); 
Verwandte Themen