2016-05-17 23 views
2

Ich brauche Hilfe, ich brauche den Unterschied in Minuten zwischen dem vorherigen Enddatum und dem Startdatum eines aktuellen Vorfalls zu berechnen, ein nach Systemzeile.Mysql berechnen Minuten zwischen vorheriger Endzeit und aktuellem Start für Systemausfallzeiten aufzeichnet

dies ist die Tabelle:

id |system |start |end | ------------------------------------------------------------ 2 | system 1 | 2016-01-01 12:00:00 | 2016-01-01 13:00:00 | ------------------------------------------------------------ 3 | system 1 | 2016-01-02 11:00:00 | 2016-01-02 12:00:00 | ------------------------------------------------------------ 5 | system 1 | 2016-01-03 15:00:00 | 2016-01-03 16:00:00 | ------------------------------------------------------------ 6 | system 2 | 2016-01-01 10:00:00 | 2016-01-01 11:00:00 | ------------------------------------------------------------ 7 | system 2 | 2016-01-02 17:00:00 | 2016-01-02 18:00:00 |

das ist das Ergebnis:

Die beiden Systeme Datensätze mit ID 2 und 6 haben keine vorherigen Aufzeichnungen ‚Enddatum‘ Subtraktion zu machen:

id | system | diff_min | --------------------------------- 2 | system 1 | 0 | --------------------------------- 3 | system 1 | 1380 | --------------------------------- 5 | system 1 | 1620 | --------------------------------- 6 | system 2 | 0 | --------------------------------- 7 | system 2 | 1800 | ---------------------------------

+0

ist dieses Ergebnis richtig? '3 | System 1 | 1380 '. Sollte es nicht so sein? 3 \t System 1 \t 1320'? – 1000111

+0

ungefährer Wert nur für das Beispiel. –

Antwort

0

Die folgende Abfrage tut dies:

SELECT 
    id, 
    system, 
    IF (@previousSystem = system, TIMESTAMPDIFF(MINUTE ,@previousEndTime,start), 
     @previousEndTime := 0) diff_min, 
    @previousSystem := system, 
    @previousEndTime := end 
FROM 
    system_table, 
    (
     SELECT 
      @previousSystem := NULL, 
      @previousEndTime := '0000-00-00 00:00:00' 
    ) var 
ORDER BY system, id; 

Ausgang:

die obige Abfrage auf Ihrer angegebenen Daten ausführen, werden Sie eine bekommen Ausgabe wie unten:

id system  diff_min 
2 system 1 0 
3 system 1 1320 
5 system 1 1620 
6 system 2 0 
7 system 2 1800 

SQL FIDDLE

ignorieren Sie bitte die letzten beiden Spalten in der Ergebnismenge von meiner Anfrage

+0

Sehr geehrte 1000111, ich versuche diese mögliche Lösung, aber ich bekomme Null-Werte in der Spalte diff_min für System, das vorherige Endzeit hat. –

+0

Bitte überprüfen Sie jetzt. Ich habe meine Antwort bearbeitet und auch eine Geige hinzugefügt. @ GermánRojas – 1000111

+0

Hat die Änderung funktioniert? @ GermánRojas – 1000111

0

Sie können dies erreichen, indem zwei eingebaute Funktionen

select id, system, TIMESTAMPDIFF(MINUTE, endDate, startDate) diff_min 

oder

select id, system, TIMEDIFF(endDate, startDate)/60 as diff_min 
0
select id,system,TIMESTAMPDIFF(MINUTE,end,start) as diff_min from table_name;