Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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.
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