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