【发布时间】:2016-02-26 22:56:33
【问题描述】:
我正在尝试使用 GROUP BY DIV 以 1 天为间隔对数据进行分组,如本文所述: Grouping into interval of 5 minutes within a time range
乍一看还不错。 但是在比较 2 个不同日期间隔(但相交)的查询时,我注意到不一致。 首先,我使用从 2 月 1 日 00:00 到 2 月 26 日 00:00 的日期范围, 第二个我使用的日期范围是从 2 月 20 日 00:00 到 2 月 26 日 00:00
这两个查询在 2 月 20 日的值不同。但其余 (21 - 25) 是匹配的。
知道发生了什么以及如何解决它吗?
更新: 这是在二月每分钟生成虚拟数据的存储过程:
DELIMITER $$
CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `testdata`()
BEGIN
DECLARE gap int;
DECLARE x bigint;
SET gap = 60000;
SET x = 1454265000000;
CREATE TABLE IF NOT EXISTS testdata (
timestamp bigint(20) default NULL,
value int(20) default NULL
)
ENGINE=MyISAM DEFAULT CHARSET=utf8;
WHILE x <= 1456770599000 DO
INSERT INTO testdata(timestamp, value) VALUES (x, FLOOR(RAND() * (270 + 1)) + 30);
SET x = x + gap;
END WHILE;
select x;
END
这里有 2 个查询来比较 2 个区间:
select from_unixtime(timestamp / 1000), count(value) from testdata where timestamp >= 1454265000000 and timestamp <= 1456770599000 group by timestamp div 86400000;
select from_unixtime(timestamp / 1000), count(value) from testdata where timestamp >= 1455906600000 and timestamp <= 1456770599000 group by timestamp div 86400000;
2016-02-20 的第一个查询返回 1440。2016-02-20 的第二个查询返回 2016-02-20 00:00:00 = 330 和 2016-02-20 05:30:00 的 2 条记录= 1440。
【问题讨论】:
-
显示您的数据和查询。
-
@Barmar 该帖子已更新数据和查询。谢谢。
-
除以86400000和
DATE(FROM_UNIXTIME(timestamp/1000))一样 -
我无法重现您的结果:sqlfiddle.com/#!9/31375/5
-
GROUP BY DIV 也给了我奇怪的结果