Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je suis confronté a une petite problématique dans une requête.
J'ai une table contenu plusieurs enregistrement par jour.
Avec un count,un generate series et un group by j'arrive à trouver facilement le nombre d'enregistrement par jour même si je n'en ai pas.
Maintenant çà ce complique, je dois déterminer si j'ai trois jours consécutifs pour lesquelles je n'ai pas d'enregistrement.
Je pense qu'avec les fonctions de fenêtrage, il doit y avoir une solution, mais je n'ai pas encore trouvé laquelle.
Avez-vous une idée ?
D'avance merci de votre aide.
HadanMarv
Dernière modification par HadanMarv (18/09/2018 17:18:26)
Hors ligne
Mieux vaut passer par la fonction generate_series().
Guillaume.
Hors ligne
Le generate_series m'est utile pour faire un count du nombre d'enregistrement par jour.
Données initiales :
ID DATE HEURE VALUE
1 01/09/2018 01:45:52 TEST0
2 01/09/2018 02:50:01 TEST1
3 02/09/2018 12:45:00 TEST2
4 02/09/2018 13:20:57 TEST3
5 02/09/2018 17:37:14 TEST4
6 04/09/2018 05:45:27 TEST5
7 04/09/2018 07:57:22 TEST6
8 05/09/2018 12:22:01 TEST7
9 09/09/2018 11:45:21 TEST8
10 09/09/2018 18:45:22 TEST9
avec un generate_series, un count et un group by j'obtiens :
DATE COUNT_ROW
01/09/2018 2
02/09/2018 3
03/09/2018 0
04/09/2018 2
05/09/2018 1
06/09/2018 0
07/09/2018 0
08/09/2018 0
09/09/2018 2
Maintenant je voudrais écrire une requête qui me permettrait de détecter que je n'ai aucune données entre le 06/09/2018 et le 08/09/2018 car 3 jours sans rien.
Je ne sais pas si je suis plus clair
HadanMarv
Hors ligne
Vous pouvez utiliser LEAD avec un fenêtrage, qui donne la valeur d'une colonne sur les lignes suivantes par rapport à un ordre spécifié explicitement.
Par exemple:
SELECT autres colonnes,
lead(count_row,1) over(w) as suivant1,
lead(count_row,2) over(w) as suivant2,
lead(count_row,3) over(w) as suivant3
FROM table
WINDOW w AS (ORDER BY date)
La condition que vous voulez est satisfaite quand suivant1 et suivant2 et suivant3 sont tous à zéro.
Attention au fait que LEAD(colonne, N) renvoie NULL quand le décalage N sort des limites du jeu de données.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Impeccable, çà fonctionne.
Merci beaucoup
Hors ligne
Pages : 1