Eu sou um novato no banco de dados, então estou procurando sua ajuda com este.
Eu tenho uma tabela contendo dados de séries temporais.
2012/01/01 00:10, 10
2012/01/01 00:30, 5
2012/01/01 01:00, 10
2012/01/01 01:40, 10
2012/01/01 02:00, 20
A tabela está armazenando dados com base no intervalo, mantendo apenas o limite superior do intervalo. Por exemplo, a primeira linha representa um intervalo de [00:00 - 00:10] com um valor de 10, a segunda linha representa um intervalo de (00:10 - 00:30] com um valor de 5 e a terceira representa um intervalo de (00:30 - 01:00) com um valor de 10.
Eu preciso de uma consulta eficiente no Postgres para agregar dados por hora para uma estrutura como a descrita acima. Portanto, o resultado seria algo como isto:
2012/01/01 00:00, 2012/01/01 01:00, 25
2012/01/01 01:00, 2012/01/01 02:00, 30
Observe que os dados das séries temporais são grandes, portanto, qualquer ajuda com a indexação seria muito apreciada.
Obrigado dan
2012/01/01 00:10, 10
, todos esses valores estão em uma única coluna ou a vírgula é um delimitador de coluna? Além disso, as horas exatas (1:00, 2:00, 3:00 etc.) são garantidas para serem armazenadas na tabela de séries temporais ou podem pular o: 00 e ter entradas como as2012/01/01 03:50
seguidas por2012/01/01 04:10
?2012/01/01 04:00, 2012/01/01 05:00, 0
? ou essa hora deve ser omitida do resumo?Respostas:
veja sqlfiddle
Quanto ao índice: você pode tentar um índice de função,
date_trunc('hour', t - interval '1 minute')
mas não tenho certeza se o postgresql pode usá-lo.fonte