MySQL: создание ведер на лету - PullRequest
0 голосов
/ 05 мая 2011

У меня есть таблица 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 ------

Так что я могу указать, что мне нужно 20 образцов за последние 24 часа.

Спасибо!

Суровый

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Вы можете конвертировать DATETIME в UNIX_TIMESTAMP и играть с делением и по модулю ...

0 голосов
/ 06 мая 2011

Вот пример запроса, который вы можете использовать. Обратите внимание, что это не работает, если число запрошенных выборок в данном временном интервале превышает половину доступных записей для этого диапазона (что означает, что размер сегмента равен единице).

-- 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. Я считаю, что есть более элегантный способ сделать это, но поскольку никто не предоставил рабочий запрос, я надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...