我有一个mysql表,每五分钟存储一次网络利用率,我现在想用这些数据进行图形化。有没有办法我可以只指定开始时间和结束时间以及我需要的桶/样本数量,MySQL可能会在某种程度上要求:?
我的表
+---------------------+-----+
| Tstamp | QID |
+---------------------+-----+
| 2010-12-10 15:05:39 | 20 |
| 2010-12-10 15:06:09 | 26 |
| 2010-12-10 15:06:14 | 27 |
| 2010-12-10 15:06:18 | 28 |
| 2010-12-10 15:06:23 | 40 |
| 2010-12-10 15:10:38 | 20 |
| 2010-12-10 15:11:12 | 26 |
| 2010-12-10 15:11:17 | 27 |
| 2010-12-10 15:11:21 | 28 |
------ SNIP ------
我可以指定我需要过去24小时内的20个样本。
谢谢!
苛刻
答案 0 :(得分:2)
您可以将DATETIME转换为UNIX_TIMESTAMP,并使用除法和模数...
答案 1 :(得分:0)
以下是您可以使用的示例查询。请注意,如果给定时间范围内请求的样本数超过该范围的可用记录数的一半(这意味着桶大小为1),则它不起作用。
-- Configuration
SET @samples = 4;
SET @start = '2011-05-06 19:44:00';
SET @end = '2011-05-06 20:46:50';
--
SET @bucket = (SELECT FLOOR(count(*)/@samples) as bucket_size FROM table1
WHERE Tstamp BETWEEN @start AND @end);
SELECT
SUM(t.QID), FLOOR((t.ID-1)/@bucket) as bucket
FROM (SELECT QID , @r:=@r+1 as ID
FROM table1
JOIN (SELECT @r:=0) r
WHERE Tstamp BETWEEN @start AND @end
ORDER BY Tstamp) as t
GROUP BY bucket
HAVING count(t.QID) = @bucket
ORDER BY bucket;
P.S。我相信有更优雅的方法可以做到这一点,但由于没有人提供有效的查询,我希望这会有所帮助。