Документ создан: 18.03.2011

Группировка по интервалу времени

Содержимое таблицы

mysql> desc log;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| date  | datetime | YES  |     | NULL    |       |
| bytes | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

надо было вывести с группировкой по времени с интервалом в 10 минут и суммированием объёма (bytes).
Нашёл такое решение:

select date(date) date1,
concat(hour(date),':',
       lpad(floor(minute(date)/10)*10+1, 2, '0'), '-',
       hour(date),':',
       lpad((floor(minute(date)/10)+1)*10, 2, '0' ) ) hour,
sum(bytes) bytes
from log
group by date1, concat(lpad(floor(minute(date)/10)*10, 2, '0'), '-',
                       lpad((floor(minute(date)/10)+1)*10, 2, '0' ) )
order by date;

Результат выглядит так:

+------------+-----------+------------+
| date1      | hour      | bytes      |
+------------+-----------+------------+
| 2011-03-14 | 6:41-6:50 | 4575378336 |
| 2011-03-14 | 6:51-6:60 | 4724137748 |
| 2011-03-14 | 7:01-7:10 | 4418186620 |
| 2011-03-14 | 7:11-7:20 | 5121563587 |
| 2011-03-14 | 7:21-7:30 | 4758454620 |
| 2011-03-14 | 7:31-7:40 | 5282202028 |
| 2011-03-15 | 6:31-6:40 | 3254517010 |
| 2011-03-15 | 6:41-6:50 | 4426497452 |
| 2011-03-15 | 6:51-6:60 | 4407375626 |
| 2011-03-15 | 7:01-7:10 | 4263523418 |
| 2011-03-15 | 7:11-7:20 | 5265712960 |
| 2011-03-15 | 7:21-7:30 | 4263179541 |
+------------+-----------+------------+
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate