Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 17/10/2016 11:30:42
- XPBT
- Membre
Inclure les lignes vides dans un SELECT... BETWEEN
Bonjour,
j'aimerais créer une requête qui me renvoie également les lignes vides de ma table.
Je m'explique : imaginons une table à deux colonnes, mettons "jour" et "valeur",
pour laquelle, sur un intervalle de temps donné, certaines lignes sont vides (pas de valeur
ce jour-là). Si on fait :
SELECT jour, valeur FROM table WHERE jour BETWEEN '2016-01-01' AND '2016-06-30'
la requête ne renverra que les lignes (c'est-à-dire les jours) où "valeur" a été renseignée.
Ce que je voudrais que la requête me renvoie, , c'est une liste de tous les jours compris
entre '2016-01-01' et '2016-06-30', avec la colonne "valeur" renseignée quand c'est possible
et "0" ou "NULL" quand il n'y a pas de valeur à cette date.
En gros il faudrait créer une itération entre les bornes du BETWEEN, ou créer une jointure
avec une table "calendrier" comprenant tous les jours (je ne peux pas créer une telle table,
j'envoie ma requête sur un serveur sur lequel je n'ai pas la main).
J'espère que mes explications sont claires, en tout cas merci d'avance pour vos idées.
Hors ligne
#2 17/10/2016 11:46:13
- rjuju
- Administrateur
Re : Inclure les lignes vides dans un SELECT... BETWEEN
Bonjour,
Vous pouvez utiliser une jointure externe sur generate_series('2016-01-01'::date, '2016-06-30', '1 day')
Julien.
https://rjuju.github.io/
Hors ligne
#3 17/10/2016 14:59:47
- XPBT
- Membre
Re : Inclure les lignes vides dans un SELECT... BETWEEN
Bonjour,
merci pour cette piste, mais je ne parviens pas à faire ma jointure correctement :
quel que soit le type de jointure, je n'arrive toujours à récupérer que les lignes
où le champ "valeurs" est non nul.
Pourriez-vous préciser votre idée ?
Hors ligne
#4 17/10/2016 15:49:42
- rjuju
- Administrateur
Re : Inclure les lignes vides dans un SELECT... BETWEEN
Quelque chose comme SELECT .... FROM table RIGHT JOIN generate_series('2016-01-01'::date, '2016-06-30', '1 day') g(d) ON table.jour = g.d WHERE g.d BETWEEN ...
Julien.
https://rjuju.github.io/
Hors ligne