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 31/08/2020 22:51:31

oles67
Membre

extraire ligne qui suit une valeur 0 dans une table.

Bonjour,

J'ai une table1 avec :

date                                 value
01/01/2020 00:00:00        0
01/01/2020 01:00:00        0
01/01/2020 02:00:00        0
01/01/2020 03:00:00        0
01/01/2020 04:00:00        5
01/01/2020 05:00:00        5
01/01/2020 06:00:00        5
01/01/2020 07:00:00        0
01/01/2020 08:00:00        0
01/01/2020 09:00:00        2 
01/01/2020 10:00:00        2
01/01/2020 11:00:00        2
01/01/2020 12:00:00        2

Comment traduire :
Si dernière ligne "value" = 0 alors extrait la dernière ligne sinon extraire la ligne qui suit le dernier "0" de la colonne value.

Dans cet exemple c'est "01/01/2020 09:00:00        2  "



Merci de votre aide.

Hors ligne

#2 01/09/2020 22:00:41

oles67
Membre

Re : extraire ligne qui suit une valeur 0 dans une table.

Je vais réfléchir en contournant le problème en supprimant les doublons consecutifs puis "order by date desc" et "limit 1"

Ainsi je récupère la dernière valeur 0, 5 ou 2

Vous en pensez quoi ? Vous feriez comment ?

Merci

Hors ligne

#3 02/09/2020 16:48:44

gleu
Administrateur

Re : extraire ligne qui suit une valeur 0 dans une table.

Mon avis est que cela doit se faire au niveau du client. SQL ne permettra pas de réaliser ça.


Guillaume.

Hors ligne

#4 03/09/2020 10:02:50

oles67
Membre

Re : extraire ligne qui suit une valeur 0 dans une table.

gleu a écrit :

Mon avis est que cela doit se faire au niveau du client. SQL ne permettra pas de réaliser ça.

Finalement j'ai trouvé une solution avec Doliprane.
Ca ne fait pas que ça.
Ca se joue sur "where Champ2 is distinct from prev_Champ2"

Si ça peut aider quelqu'un....

Select -- table3
	*,
	first_value(Champ1) over(partition by Champ3 order by Champ1 desc) as firstChamp1, -- retourne la dernière valeur du champ (Date/heure) pour chaque group champ3 
	first_value(Champ2) over(partition by Champ3 order by Champ1 desc) as FirstChamp2  -- retourne la dernière valeur du champ (Valeur) pour chaque groupe champ3 
	from ( 
	SELECT -- table2
		* 
	from( 
		SELECT 
			Champ3,
			Champ1,
			Champ2,
			lag(Champ3) over(order by Champ3,Champ1) as prev_Champ3,
			lag(Champ2) over(order by Champ3,Champ1) as prev_Champ2
		FROM 
			public.MaTable
			Order by Champ3,Champ1,Champ2 asc
	) as table2
where Champ2 is distinct from prev_Champ2  -- Filtre doublons consécutifs du champ 2 (valeur)
order by Champ3,Champ1 asc
) as table3

Dernière modification par oles67 (03/09/2020 10:04:52)

Hors ligne

Pied de page des forums