recherche

Maison  >  Questions et réponses  >  le corps du texte

Requête SQL pour obtenir l'heure de chaque statut

É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粉605385621P粉605385621315 Il y a quelques jours442

répondre à tous(1)je répondrai

  • P粉505917590

    P粉5059175902024-02-26 16:29:29

    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< /a> et LAG. Si vous n'utilisez pas MySQL 8.0, mais une version plus ancienne, cette réponse peut ne pas être utile...

    répondre
    0
  • Annulerrépondre