2017-02-07 2 views
0

Ich habe eine Mysql-Tabelle namens Zeit (Beispiel 1) mit mehreren Zeitstempeln pro Tag, sie stellen Anmelde-und Abmeldezeiten.Start Stop Unterschied nach Viertelstunden gruppiert

Die zweite Tabelle ist time_intervals genannt, die mich mit der Ausgabe von Beispiel verlässt 2.

Ich brauche diese Benutzer die Dauer, um herauszufinden, wurde von 15 Minuten in Scheiben gruppiert protokolliert.

Beispiel 3 zeigt mein gewünschtes Ergebnis an.

Beispiel 1 (time)

start_time  | end_time   | duration_s | user | 
---------------------------------------------------------------- 
2017-02-07 06:01:13 | 2017-02-07 07:03:19 | 3726  | x | 
2017-02-07 07:31:29 | 2017-02-07 08:00:00 | 3726  | x | 
2017............... ................... ....   . 

Beispiel 2 (time_intervals)

interval_start | interval_end  | 
-------------------------------------------- 
2017-02-07 06:00:00 | 2017-02-07 06:14:59 | 
2017-02-07 06:15:00 | 2017-02-07 06:29:59 | 
2017-02-07 06:30:00 | 2017-02-07 06:44:59 | 
2017-02-07 06:45:00 | 2017-02-07 06:59:59 | 
2017-02-07 07:00:00 | 2017-02-07 07:14:59 | 
2017............... | 2017............... 

Beispiel 3 (gewünschter Ausgang)

interval_start  | interval_start  | duration_s | user | 
---------------------------------------------------------------- 
2017-02-07 06:00:00 | 2017-02-07 06:14:59 | 826 | x | 
2017-02-07 06:15:00 | 2017-02-07 06:29:59 | 899 | x | 
2017-02-07 06:30:00 | 2017-02-07 06:44:59 | 899 | x | 
2017-02-07 06:45:00 | 2017-02-07 06:59:59 | 899 | x | 
2017-02-07 07:00:00 | 2017-02-07 07:14:59 | 199 | x | 
2017-02-07 07:15:00 | 2017-02-07 07:30:59 | 0  | x | 
2017-02-07 07:30:00 | 2017-02-07 07:44:59 | 810 | x | 

Jede Art von Hilfe wäre willkommen.

Antwort

0

So etwas wie die folgenden sollten funktionieren, dass time_intervals alle 15 Minuten hält Intervalle angezeigt werden:

SELECT ti.interval_start, 
     ti.interval_end,  
     TIMESTAMPDIFF(SECOND, GREATEST(t.start_time, ti.interval_start), 
          LEAST(t.end_time, ti.interval_end)) AS duration_s 
FROM time_intervals AS ti 
LEFT JOIN time AS t 
    ON t.start_time <= ti.interval_end AND t.end_time >= ti.interval_start 
+0

„vorausgesetzt, dass time_intervals alle 15 Minuten hält Intervalle“ hmm. – Strawberry