Requête SQL pour obtenir l'heure de chaque statut
P粉605385621
P粉605385621 2024-02-25 21:01:57
0
1
412

Étant donné un tableau comme indiqué ci-dessous

|date      |From       | To                 |
  |01/01/21  |Open       |In progress         |
  |01/03/21  |In progress|In review           | 
  |01/10/21  |In Review  |Done                |
  |01/15/21  |Done       |Resolved            |

Existe-t-il un moyen de suivre le temps passé dans chaque statut en fonction de la date à laquelle le statut a changé ? La table avec laquelle je travaille n'a qu'une colonne de date.

Le résultat souhaité ressemble à ceci

|Time spent in phase|Status|
|2                  |Open
|7                  |In review
|5                  |Done

Je n'ai qu'une seule table avec laquelle travailler, alors existe-t-il une requête qui résoudrait bien ce problème ? Ce flux de travail a des règles définies pour que seules les opérations ouvertes puissent progresser.

Si tel est le cas, est-il possible d'utiliser ces changements d'état du workflow pour obtenir des requêtes potentielles ?

P粉605385621
P粉605385621

répondre à tous(1)
P粉505917590

DBFIDDLE

Malgré mon dernier commentaire sur votre "question", j'ai créé un violon. Il a deux options :

  • Option 1
SELECT 
    DATEDIFF(COALESCE(LEAD(`Date`) OVER (ORDER BY `Date`),`date`),`Date`) as 'Time spent in phase',
    `From`
FROM ThatLooksLikethis;

Sortie :

Temps passé sur scène de
2 Ouvert
7 En cours
5 En cours de révision
0 Complet
  • Option 2 :
SELECT 
    DATEDIFF(`Date`,COALESCE(LAG(`Date`) OVER (ORDER BY `Date`),`date`)) as 'Time spent in phase',
    `From`
FROM ThatLooksLikethis;

Sortie :

Temps passé sur scène de
0 Ouvert
2 En cours
7 En cours de révision
5 Complet

P.S. Cette réponse utilise les fonctions MySQL 8.0 LEAD et LAG. Si vous n'utilisez pas MySQL 8.0, mais une version plus ancienne, cette réponse peut ne pas être utile...

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal