Descrição:
Como posso agrupar dados de uma Consulta do Elipse E3 por um intervalo de tempo pré-definido? Por exemplo, preciso que o tempo de amostragem dos dados seja de 45 minutos:
15:00, 15:45, 16:30, 17:15, etc.
Solução:
Antes de mais nada, a Consulta (ou Query) é o objeto que auxilia no processo de definição de consultas no Banco de Dados da aplicação. Toda vez que os objetos E3Browser ou Relatório buscam dados de um BD, é necessário enviar um comando; este comando informa quais os dados desejados para aquele objeto. Logo, sempre que uma aplicação precisar gravar ou buscar dados de um Banco de Dados, são enviados comandos SQL. A Consulta apresenta uma interface amigável, que permite não apenas a construção das consultas em uma forma gráfica mas também o acompanhamento imediato da sintaxe SQL que está sendo gerada.
Para agrupar dados em uma Consulta por um intervalo de tempo pré-definido, é possível utilizar utilizar um algoritmo que gera uma data arredondada dentro de intervalos de 45 minutos.
Utilizando as funções do SQL Server, conseguimos aplicar este algoritmo da seguinte forma:
SELECT DATEADD(MINUTE,(DATEDIFF(MINUTE, 0 , E3TimeStamp)/45)*45,0) AS E3TimeStamp, SUM(Campo1) AS Campo1, COUNT(*) AS Total FROM TemperaturasCamara001 GROUP BY DATEADD(MINUTE,(DATEDIFF(MINUTE, 0 , E3TimeStamp)/45)*45,0) ORDER BY E3TimeStamp ASC
É possível verificar que os dados foram apresentados respeitando o intervalo de tempo desejado (45 minutos):
Como os registros são agrupados a cada 45 minutos, os demais campos que selecionados devem utilizar uma função de agregação; estas funções são AVG, COUNT, MAX, MIN e SUM.
O artigo relacionado, KB-13180: Consulta SQL retornando valores de 10 em 10 minutos, ilustra outra alternativa para retornar dados em um intervalo de tempo.
Boa tarde, realizei o teste e funcionou perfeitamente. Como fazer para ele começar por exemplo as 00:05 em vez dele começar em hora fechada.
Muito Obrigado.
Boa tarde Rafael!
Você pode utilizar o comando DATEADD e adicionar 5 segundos no E3TimeStamp:
DATEADD(SECOND, 5, DATEADD(MINUTE,(DATEDIFF(MINUTE, 0 , E3TimeStamp)/45)*45,0))
Sintaxe atualizada:
SELECT
DATEADD(SECOND, 5, DATEADD(MINUTE,(DATEDIFF(MINUTE, 0 , E3TimeStamp)/45)*45,0)) AS E3TimeStamp,
SUM(Campo1) AS Campo1,
COUNT(*) AS Total
FROM
TemperaturasCamara001
GROUP BY
DATEADD(SECOND, 5, DATEADD(MINUTE,(DATEDIFF(MINUTE, 0 , E3TimeStamp)/45)*45,0))
ORDER BY E3TimeStamp ASC
Resultado:
Este algoritmo agrupa os minutos desejados automaticamente, sem opção de definir o primeiro registro, e outro detalhe é que nem sempre a disposição dos registros iniciará em hora cheia.
boa tarde, preciso que o select traga os registros a cada quinze minutos “pontualmente”, a query acima no meu caso está somando, tenho duas colunas e preciso apenas como eu disse que os resultados sejam exibidos a cada 15 minutos em uma data que eu informar, como ficaria a query nestas condições?