У меня есть таблица, table_1, который имеет данные за каждую минуту и выглядит как:агрегирование MySQL данные минутных-накрест необработанных данных
+---------------------+---------+
| date_time | value |
+---------------------+---------+
| 2015-06-05 18:00:00 | 222.663 |
| 2015-06-05 18:01:00 | 222.749 |
| 2015-06-05 18:02:00 | 222.957 |
| 2015-06-05 18:03:00 | 223.063 |
| 2015-06-05 18:04:00 | 223.117 |
+---------------------+---------+
Я хочу получать минимальные и максимальные значения для каждого 15-минутного интервала (или любой другой интервал, настраиваемый). Желаемый результат:
+---------------------+---------+
| date_time | value |
+---------------------+---------+
| 2015-06-05 18:10:00 | 200.663 | (min between 18:00 and 18:14)
| 2015-06-05 18:13:00 | 222.749 | (max between 18:00 and 18:14)
| 2015-06-05 18:17:00 | 190.957 | (min between 18:15 and 18:29)
| 2015-06-05 18:33:00 | 400.063 | (max between 18:15 and 18:29)
+---------------------+---------+
настоящее время я использую следующее решение:
select date_time, value
from table_1,
(select date_time h,
min(value) min, max(value) max
from table_1 where date_time >= '2015-06-05 18:00:00' and date_time < '2015-06-05 19:00:00'
group by round(unix_timestamp(date_time)/(15 * 60))
) t
where value in (min, max)
and date_time = h
Решение основано на: Aggregating MySQL data on hourly basis from minute-wise raw data
Однако нынешнее решение дает мне только два значения (один мин и один максимум). Я хочу иметь ВСЕ значения min и max из ВСЕХ 15-минутных интервалов, как показано на примере выше.
Почему вы не хотите думать, по крайней мере, два minitutes? :(выберите дата_время, значение из t1, (выбрать круглую (UNIX_TIMESTAMP (DATE_TIME)/(15 * 60)) ч, мин (значение) мин, макс (значение) макс от t1 группы по ч ) т где значение в (мин, макс.) и round (unix_timestamp (date_time)/(15 * 60)) = h – splash58
@ splash58 sorry mate, я все еще новичок и не смог найти правильное решение. решение. BTW, я заменил round() на floor(). – luvlogic
floor is good :) – splash58