Bonjour,
Je coince sur une requête depuis pas mal de temps ...
J'ai dans ma base une courbe qui s'identifie de cette manière (datepoint, valeur) avec datepoint = une mesure au pas 10 minute.
Cette courbe oscille entre 0 et +400 avec des longues périodes à 0 et des longues périodes à 400.
Ce que je veux, c'est découper tous les jours à minuit cette courbe, et trouver le dernier point T0 ou la courbe monte, et le point T1 ou la courbe descend.
Pour le moment j'ai ces requêtes mais qui fonctionne avec getDate() alors qu'il faudrait la faire évoluer récursivement par échantillon.
Une idée ? Peut être qu'il faut que je regarde dans les clauses de fenêtrage type OVER PARTITION ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 -- DEMARRAGE SELECT pm1.grp_id, dateadd(mi,30, max (pm1.datepoint30)) AS dernier_demarrage FROM codap.gtm_prod_grp30mn_mixte pm1 WHERE pm1.prg_reel = 0 AND pm1.grp_id IS NOT NULL AND pm1.datepoint30 < (SELECT max (pm2.datepoint30) FROM codap.gtm_prod_grp30mn_mixte pm2 WHERE pm2.grp_id = pm1.grp_id AND pm2.prg_reel > 0) AND pm1.datepoint30 < getdate() GROUP BY pm1.grp_id -- ARRET SELECT pm1.grp_id, max (pm1.datepoint30) AS dernier_arret FROM codap.gtm_prod_grp30mn_mixte pm1 WHERE pm1.prg_reel > 0 AND pm1.grp_id IS NOT NULL AND pm1.datepoint30 <= (SELECT max (pm2.datepoint30) FROM codap.gtm_prod_grp30mn_mixte pm2 WHERE pm2.grp_id = pm1.grp_id AND pm2.prg_reel = 0 ) AND pm1.datepoint30 < getdate() GROUP BY pm1.grp_id
Partager