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 12/08/2020 14:17:50

oles67
Membre

[résolu] compter les fronts montants de valeur de reférence d'articles

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

#2 13/08/2020 13:34:46

rjuju
Administrateur

Re : [résolu] compter les fronts montants de valeur de reférence d'articles

Vous devriez pouvoir faire ça avec des window functions: https://www.postgresql.org/docs/current … indow.html

Hors ligne

#3 13/08/2020 16:24:20

oles67
Membre

Re : [résolu] compter les fronts montants de valeur de reférence d'articles

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

#4 13/08/2020 16:25:28

oles67
Membre

Re : [résolu] compter les fronts montants de valeur de reférence d'articles

rjuju a écrit :

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

Pied de page des forums