2016-06-10 9 views
0

Angesichts der folgenden Struktur und Daten:Wie kann ich innerhalb eines bestimmten Zeitraums nach einem Zeitintervall gruppieren?

user initial_date   final_date 
'JOHN' '2016-05-05 18:21:51', '2016-05-05 18:50:34' 
'JOHN' '2016-05-05 18:51:44', '2016-05-05 19:10:54' 

Und die Zeit zwischen 2016-05-05 00:00:00 und 2016-05-05 18:59:59 bedenkt, ich brauche, um herauszufinden, wie viel Minuten John in diesen Registern wie folgt ausgegeben:

user initial_date   final_date    minutes_spent 
'JOHN' '2016-05-05 18:20:00', '2016-05-05 18:50:00' 30 
'JOHN' '2016-05-05 18:51:00', '2016-05-05 19:10:00' 9 

Am

In der zweiten Zeile ist das Ergebnis 9, da meine Suchperiode bis 18:59:59 ist, also muss der Zeitraum nach 19:00:00 ignoriert werden.

Antwort

2

macht diese Arbeit für Sie:

select timestampdiff(MINUTE, greatest(initial_date,$start_of_range), 
least(final_date,$end_of_range)) from tbl where initial_date between 
$start_of_range and $end_of_range or 
final_date between $start_of_range and $end_of_range 

?

+1

Benötigt dies ein 'OR final_date zwischen $ start_of_range und $ end_of_range'? – Uueerdo

+0

@Uueerdo, Sie haben Recht! Die nach 18:00 Uhr begonnenen, aber danach beendeten Alben werden ebenfalls summiert. – dellasavia

+1

@dellasavia oh, warte, ich habe mich vorher mit dieser Art von Problem beschäftigt; auch jetzt verschwenden wir Intervalle, die vor dem Bereich beginnen und danach enden. – Uueerdo

Verwandte Themen