Requête récursive et/ou fenêtrage dynamique
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:
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 |