Vous n'êtes pas identifié(e).
Bonjour,
En général j'arrive à mes fin grâce aux recherche sur le forum, mais là, j'ai un problème de noeud au cerveau.
J'aimerai compter le nombre de fois où "valeur" augmente pour chaque article. Et ça, je n'ai pas trouvé comment faire.
La première colonne est la date et l'heure (trié dans l'ordre du plus ancien en premier vers le plus récent en dernier)
La colonne "Ref" c'est la référence article
La "valeur" peut-être de 0 à 9 ou des NON/OUI, FAUX/VRAI (sachant que 0, NON, Faux,... sera toujours 0)
La colonne "incrémente" est uniquement là pour vous montrer quand la valeur doit incrémenté (Voir résultat table plus bas)
Table origine
Date Ref Valeur Incremente (pour comprehension)
01/01/2020 01:00:00 Ref1 1 Ref 1 ++
01/01/2020 02:00:00 Ref1 1
01/01/2020 03:00:00 Ref1 0
01/01/2020 04:00:00 Ref2 0
01/01/2020 05:00:00 Ref2 5 Ref 2 ++
01/01/2020 06:00:00 Ref2 0
01/01/2020 07:00:00 Ref2 5 Ref 2 ++
01/01/2020 08:00:00 Ref2 0
01/01/2020 08:00:00 Ref1 0
01/01/2020 10:00:00 Ref1 0
01/01/2020 11:00:00 Ref2 5 Ref 2 ++
01/01/2020 12:00:00 Ref1 1 Ref 1 ++
01/01/2020 13:00:00 Ref1 1
01/01/2020 14:00:00 Ref2 5
01/01/2020 15:00:00 Ref2 5
01/01/2020 16:00:00 Ref2 0
01/01/2020 17:00:00 Ref2 0
01/01/2020 18:00:00 Ref2 0
01/01/2020 19:00:00 Ref1 0
01/01/2020 20:00:00 Ref1 1 Ref 1 ++
01/01/2020 21:00:00 Ref2 5 Ref 2 ++
01/01/2020 22:00:00 Ref2 0
02/01/2020 01:00:00 Ref2 0
02/01/2020 02:00:00 Ref2 5 Ref 2 ++
02/01/2020 03:00:00 Ref1 0
02/01/2020 04:00:00 Ref2 0
02/01/2020 05:00:00 Ref2 5 Ref 2 ++
02/01/2020 06:00:00 Ref2 0
02/01/2020 07:00:00 Ref1 1 Ref 1 ++
02/01/2020 08:00:00 Ref1 0
02/01/2020 09:00:00 Ref2 5 Ref 2 ++
02/01/2020 10:00:00 Ref2 0
02/01/2020 11:00:00 Ref1 1 Ref 1 ++
02/01/2020 12:00:00 Ref1 0
Table résultat :
Date Ref Count
01/01/2020 Ref1 3
01/01/2020 Ref2 4
02/01/2020 Ref1 2
02/01/2020 Ref2 3
C'est un exemple, l'ordre de tri/période(jour, mois, année) ne devraient pas être un problème.
Merci de votre aide.
Si vous avez des questions, n'hésitez pas.
Dernière modification par oles67 (13/08/2020 16:25:57)
Hors ligne
Vous devriez pouvoir faire ça avec des window functions: https://www.postgresql.org/docs/current … indow.html
Julien.
https://rjuju.github.io/
Hors ligne
Finalement j'ai trouvé une solution.
Si vous avez des commentaires sur mon code, je suis preneur.
select
evtProduit,
DateOfDay,
count(DateOfDay)
from
(
SELECT
evtProduit,
evtdatetime,
evtAction,
lag(evtProduit) over(order by evtProduit,evtdatetime) as prev_evtProduit,
lag(evtAction) over(order by evtProduit,evtdatetime) as prev_evtAction,
to_char(evtdatetime, 'YYYYMMDD') as DateOfDay
FROM
public.MaTable
where
DATE_PART('year', evtdatetime)='2020'
Order by
evtProduit,
evtdatetime,
evtAction
asc
) table2
where
(evtProduit<>prev_evtProduit and evtProduit>0)
or
(evtAction<>prev_evtAction and evtAction>0)
or
(evtAction>0 and prev_evtAction is null)
group by evtProduit, DateOfDay
order by evtProduit, dateofday
Le résultat (j'ai vérifié).
RefProduit Date Count
253897 20200105 1
253899 20200105 1
254205 20200105 1
254205 20200430 1
254224 20200105 1
254224 20200121 1
254224 20200122 2
254224 20200123 93
254224 20200124 106
254224 20200126 1
254224 20200206 1
254224 20200207 2
254224 20200430 1
256409 20200105 1
259251 20200105 1
265451 20200105 1
266896 20200101 1
Hors ligne
Vous devriez pouvoir faire ça avec des window functions: https://www.postgresql.org/docs/current … indow.html
Bonjour,
désolé, j'ai trouvé une solution. Je vais suivre votre lien pour en apprendre plus sur les windows functions.
Merci
Hors ligne