2017-10-18 13 views
-1

Je dois énumérer toutes les dates entre une date de début (de prescription) donnée et une date de fin - (dans le cadre d'une requête beaucoup plus grande).MySQL - Liste toutes les dates entre deux dates données en utilisant les variables de session

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

J'essaie d'utiliser des variables de session. Mais je trouve difficile de définir la valeur initiale dans la variable. La première exécution n'aboutit à aucune valeur mais l'exécution suivante me donne le résultat correct (parce que la première exécution définit les variables).

Pour simplifier mon besoin, voici l'essentiel de ma requête:

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 est une table avec quelques enregistrements.

Pour réinitialiser les variables de retour après l'exécution:

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

double possible de [Comment obtenir la liste des dates entre deux dates dans la requête select mysql] (https://stackoverflow.com/questions/9295616/how-to-get-list-of-dates-between -deux-dates-dans-mysql-select-query) – GurV

+0

Merci de m'avoir indiqué le lien. Je le regarde. En plus de cela, est-il possible d'avoir le même résultat avec la requête ci-dessus en utilisant des variables? –

+0

Toujours aux prises? Voir https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

Répondre

0

J'ai réussi à obtenir ce avec la variable.

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);