2016-07-25 22 views
0

Ich habe Daten in der folgenden Form:Wie berechnet man die Lösungszeit in MySQL?

((2016-07-22 09:46:40 - 2016.07.21 11.46:

TicketID Status Datetime 
25   Open  2016-07-21 11:46:40 
25   Open  2016-07-22 09:42:40 
25   Closed 2016-07-22 09:46:40 
25   Open  2016-07-23 08:42:40 
25   Open  2016-07-24 08:46:40 
25   Open  2016-07-24 09:26:40 
25   Closed 2016-07-25 11:46:40 

ich folgend berechnet werden soll: 40) + (2016-07-25 11:46:40 - 2016-07-23 08:42:40))/2.

+0

Ich glaube nicht, dass Ihre Berechnung korrekt ist. Der erste Wert ist "0". –

+0

Versuchen Sie, die durchschnittliche Bearbeitungszeit pro Ticket zu berechnen? Hier kann jedes Ticket mehrfach unter derselben ID geöffnet und geschlossen werden. Wie @GordonLinoff sagt, scheint deine Berechnung falsch zu sein (wahrscheinlich nur ein Tippfehler). Ich nehme an, es sollte sein: '(('2016-06-22 09:46:40' - '2016-06-21 11:46:40') + ('2016-07-25 11:46:40' - '2016-06-23 08:42:40'))/2' –

Antwort

1

Hier ist eine Idee: Für jedes "Öffnen" erhalten Sie das nächste "Geschlossen". Wählen Sie dann nur die "geschlossenen" Werte und nehmen Sie das Minimum offen, um die Länge der Zeit zu bestimmen. Also, das folgende bekommt die Paare von Zeiten, die Sie wollen:

select close_datetime, min(datetime) as open_datetime 
from (select t.*, 
      (select t2.DateTime 
       from t t2 
       where t2.status = 'Closed' and t2.DateTime > t.DateTime 
      ) as close_datetime 
     from t 
     where status = 'Open' 
    ) t 
group by close_datetime; 

Sie können dann die Summe der Unterschiede erhalten. Dies erhält den Wert in Sekunden:

select sum(timestampdiff(second, clsoe_datetime, open_datetime) as num_seconds 
from (select close_datetime, min(datetime) as open_datetime 
     from (select t.*, 
        (select t2.DateTime 
        from t t2 
        where t2.status = 'Closed' and t2.DateTime > t.DateTime 
        ) as close_datetime 
      from t 
      where status = 'Open' 
      ) t 
     group by close_datetime 
    ) t 
+0

Überprüfen Sie meine Antwort auch! – MontyPython

0

Das scheint mir in Ordnung.

set @x=now(), @y=-1; 

select 
    avg(timestampdiff(second,prev_stat_dt,curr_stat_dt)) 
from 
    (select 
     TicketID, 
      @y prev_stat, 
      @y:=Status curr_stat, 
      @x prev_stat_dt, 
      @x:=DateTime curr_stat_dt 
    from 
     table1 
    where 
      Status in ('Open' , 'Closed')) t 
where 
    prev_stat = 'Open' and curr_stat = 'Closed'; 
+0

Die Zuweisung von Variablen in separaten Ausdrücken funktioniert nicht garantiert. MySQL garantiert nicht die Reihenfolge der Auswertung von Ausdrücken in einem 'SELECT', so dass die vier Zuweisungen in beliebiger Reihenfolge sein können. –

+0

Es gibt keine Möglichkeit, einen Vorsprung in MySQL zu machen? @GordonLinoff – MontyPython

+0

Ja, aber es ist ein wenig schwierig mit Variablen. –

Verwandte Themen