Возврат строк агрегированных результатов из одного запроса SQL - PullRequest
3 голосов
/ 23 августа 2011

У меня есть таблица MySQL, содержащая столбец для хранения времени и другой для хранения значения, связанного с этим временем.

time | value
------------
 1   |  0.5     
 3   |  1.0     
 4   |  1.5 
.... | .....

События не являются периодическими, т. Е. Значения времени не увеличиваются на фиксированный интервал.

Поскольку имеется большое количество строк (> 100000), для целей отображения значений на графике я хотел бы иметь возможность агрегировать (средние) значения для интервала фиксированного размера по всемуотрезок времени, за который доступны данные.Таким образом, в основном выходные данные должны состоять из пар интервалов и средних значений.

В настоящее время я разделяю общий временной интервал на фиксированные порции времени, выполняя отдельные агрегированные запросы для этого интервала и собирая результаты в коде приложения (Джава).Есть ли способ сделать все эти шаги в SQL.Кроме того, в настоящее время я использую MySQL, но я открыт для других баз данных, которые могут поддерживать эффективное решение.

Ответы [ 2 ]

3 голосов
/ 23 августа 2011
SELECT FLOOR(time / x) AS Inter, AVG(value) AS Mean
FROM `table` 
GROUP BY Inter;

Где x - ваш интервал фиксированного размера.

2 голосов
/ 23 августа 2011

Обычно я решал эту проблему с помощью таблицы «период» со всеми действительными значениями времени и связью с периодом, о котором я сообщаю.

Например:

time      day   week month year
1           1      1     1 2001 
2           1      1     1 2001
....
999         7      52   12 2010

Затем вы можете присоединить свое время к времени таблицы "period" и использовать AVG.

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