suchen

Heim  >  Fragen und Antworten  >  Hauptteil

SQL-Abfrage, um die Zeit jedes Status zu erhalten

Gegeben ist eine Tabelle wie unten gezeigt

|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            |

Gibt es eine Möglichkeit, die in jedem Status verbrachte Zeit basierend auf dem Datum der Statusänderung zu verfolgen? Die Tabelle, mit der ich arbeite, enthält nur eine Datumsspalte.

Das gewünschte Ergebnis sieht so aus

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

Ich habe nur eine Tabelle, mit der ich arbeiten kann. Gibt es also eine Abfrage, die dieses Problem gut lösen würde? Für diesen Workflow sind Regeln festgelegt, sodass nur geöffnete Dateien ausgeführt werden können.

Wenn ja, ist es möglich, diese Workflow-Statusänderungen zu nutzen, um potenzielle Anfragen zu erhalten?

P粉605385621P粉605385621280 Tage vor396

Antworte allen(1)Ich werde antworten

  • P粉505917590

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

    DBFIDDLE

    尽管我最后对你的“问题”发表了评论,但我还是创建了一个小提琴。它有两个选项:

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

    输出:

    阶段花费的时间 来自
    2 打开
    7 进行中
    5 审核中
    0 完成
    • 选项2:
    SELECT 
        DATEDIFF(`Date`,COALESCE(LAG(`Date`) OVER (ORDER BY `Date`),`date`)) as 'Time spent in phase',
        `From`
    FROM ThatLooksLikethis;

    输出:

    阶段花费的时间 来自
    0 打开
    2 进行中
    7 审核中
    5 完成

    附注这个答案使用MySQL 8.0函数 LEAD< /a> 和 LAG。如果您使用的不是 MySQL 8.0,而是旧版本,那么这个答案可能没用......

    Antwort
    0
  • StornierenAntwort