PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#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')

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 ...

Hors ligne

Pied de page des forums