Mysql 如何在特定时间段内按时间间隔分组?

Mysql 如何在特定时间段内按时间间隔分组?,mysql,sql,period,Mysql,Sql,Period,鉴于以下结构和数据: 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' 考虑到从2016-05-05 00:00:00到2016-05-05 18:59:59,我需要知道John在这些寄存器中花费了多少分钟,如下所示: user initial_dat

鉴于以下结构和数据:

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'
考虑到从
2016-05-05 00:00:00
2016-05-05 18:59:59
,我需要知道John在这些寄存器中花费了多少分钟,如下所示:

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

第二行的结果是9,因为我的搜索时间是18:59:59,所以必须忽略19:00:00之后的时间。

这对您有用吗:

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

这对您有用吗:

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

这是否需要一个介于$start\u of \u range和$end\u of \u range之间的
或最终日期?@uuerdo,你说得对!所以,在18:00:00之后开始但在18:00:00之后结束的记录也将被汇总。@dellasavia哦,等等,我以前处理过这种问题;即使现在,我们也忽略了从范围之前开始到范围之后结束的间隔。我认为这是起作用的最小条件
initial=start
这是否需要一个介于范围的$start\u和范围的$end\u之间的
或final\u日期
?@uuerdo,你是对的!所以,在18:00:00之后开始但在18:00:00之后结束的记录也将被汇总。@dellasavia哦,等等,我以前处理过这种问题;即使现在,我们也忽略了从范围之前开始到范围之后结束的间隔。我认为这是最小的有效条件
initial=start