Suponha que eu tenha a seguinte tabela -
CREATE TABLE data_points (t DATETIME PRIMARY KEY, value INTEGER);
Quero agregar os dados calculando a média de cada 10 pontos na tabela.
ou seja, se a tabela tiver 20 pontos de dados, o resultado será dois pontos agregados. 1º ponto agregado a média de 1-10 pontos de dados e 2º de 11-20.
Isso é possível usando uma consulta SQL?
Como você não divulgou o RDBMS que pretende usar (no momento em que escrevo), sinto-me autorizado a postar uma solução específica do PostgreSQL:
No primeiro CTE (chamado
rownums
) simplesmente adicionei os números das linhas de acordo com a ordenação pelo carimbo de data/hora. Isso foi necessário para poder encontrar a cada 10 linhas posteriormente. (Se houvesse uma chave única adicional nesta tabela, isso seria desnecessário.) Noaverages
CTE eu calculo uma média móvel em cada linha. A janela é definida de forma que a linha atual e as nove anteriores forneçam os números a serem calculados. Por fim, simplesmente retorno a cada 10 linhas.Ambos
row_number()
eavg()
são funções de janela aqui. O MySQL não possui essa funcionalidade e, até onde eu sei, o H2 também. Portanto, portar a consulta acima para estes envolverá muito mais truques, eu acho.Experimente no SQLFiddle .