正如Gordon提到的,您可能需要一个辅助表作为所有5分钟间隔的基础。我已经做了类似的查询使用MySQL变量自我构建。
select
YourTable.WhateverFields
from
(select
@startTime RangeStart,
@startTime := date_add(@startTime, interval 5 MINUTE) RangeEnd
from
(select @startTime := '2014-10-20') sqlvars,
AnyTableThatHasAsManyDaysYouExpectToReport
limit
12 * numberOfHoursYouNeed * numberOfDaysYouNeed) DynamicTimeRange
LEFT JOIN YourTable
on YourTable.DateTimeField >= DynamicTimeRange.RangeStart
AND YourTable.DateTimeField < DynamicTimeRange.RangeEnd
因此,在这个例子中,最里面的一个变量“startTime”到2014年10月20日,默认为12:00:00。随后,一出从创建一个rangeStart和rangeEnd的和组的两列可能看起来像一个结果......
RangeStart RangeEnd
2014-10-20 00:00 2014-10-20 00:05
2014-10-20 05:00 2014-10-20 00:10
2014-10-20 10:00 2014-10-20 00:15
2014-10-20 05:00 2014-10-20 00:20
2014-10-20 20:00 2014-10-20 00:25
表参考“AnyTableThatHasAsManyDaysYouExpectToReport”就是这样......在你的数据库的任何表它的记录数量至少与无数小时和数天需要5分钟的时间间隔相同。如果您需要1天价值= 12条记录* 5分钟= 1小时* 24小时= 24 * 12 =需要288条记录。如果你想要一个星期,那么就这样......乘以7,所以我的样本只是有地方持有人来帮助澄清意图......
但是,通过LEFT JOIN,您可以获得所有间隔.. 。
谢谢!差距不是由于where子句,而是由于缺少任何条目。一个具有所有时间框架的子查询怎么可能是?带额外桌子的营养不是很优雅,因为我想看到所有的时间框架到现在或某个时间点。 – tobawo 2014-10-27 23:39:48