Pour connaître l'heure de changement d'état :
Code:
1 2 3 4 5 6 7 8 9 10
| SELECT deb.etat AS Etat
, deb.datedeb AS Debut_Etat
, MIN(sui.datedeb) AS Fin_Etat
FROM matable deb
LEFT JOIN
matable sui
ON deb.datedeb < sui.datedeb
GROUP BY deb.etat
, deb.datedeb
; |
Donc pour avoir les durées par état :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| SELECT eta.etat
, SUM(eta.fin_etat - eta.debut_etat) AS duree
FROM ( SELECT deb.etat AS Etat
, deb.datedeb AS Debut_Etat
, MIN(sui.datedeb) AS Fin_Etat
FROM matable deb
INNER JOIN
matable sui
ON deb.datedeb < sui.datedeb
GROUP BY deb.etat
, deb.datedeb
) eta
GROUP BY eta.etat
; |
Avec un index sur (datedeb, etat), ça ne devrait pas prendre des heures...