KB-111510: Agrupando dados de uma Consulta por intervalo de tempo.

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 agrupar dados em um intervalo de tempo

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.

 

Artigos Relacionados:


Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 5 / 5. Count: 1

Thoughts on “KB-111510: Agrupando dados de uma Consulta por intervalo de tempo.

  1. 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.

    1. 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:
      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.

  2. 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?

Leave a Reply

Your email address will not be published.Required fields are marked *