Obtendo médias de tempo (minutos, horas e dias) em um banco de dados SQL Server.

Neste artigo, mostraremos como obter as médias dos campos de uma tabela do banco de dados SQL Server em três diferentes bases de tempo (minuto, hora e dia). Para tal, é necessário isolar os valores do campo de DataHora – E3TimeStamp – na base de tempo desejada, e agrupar os dados utilizando esta mesma base de tempo. Isto é, para fazer uma média de valores agrupados por minuto, é necessário manipular o E3TimeStamp de tal forma que qualquer informação menor que o minuto seja omitida (neste caso, informações referente aos segundos e milissegundos). Isto pode ser feito utilizando-se o comando CAST, que tem a função de converter tipos de dados, e realizando alguns cálculos. No momento destes cálculos, deve-se levar em consideração que uma unidade neste valor de data equivale a um dia. Para calcular a média, pode-se usar o comando AVG.

Médias por minuto: para obter as médias por minuto, é necessário obter os segundos e milissegundos do E3TimeStamp. Para tal, deve-se multiplicar este campo por 24 (para converter a base de tempo para horas), e depois por 60 (para convertê-la para minutos). O resultado deve ser manipulado para isolar a parte inteira, que corresponderá aos minutos. Por fim, deve-se dividir tudo pelo mesmo valor (1440 = 24 x 60) para que o dado seja convertido novamente para o formato data. O resultado destes cálculos será utilizado para agrupar os dados.

SELECT CAST(CAST(CAST(CAST(E3TimeStamp as float)*1440 as bigint) as float)/1440 as datetime) as Minuto, AVG(Campo) as Média
FROM Tabela
GROUP BY CAST(CAST(CAST(CAST(E3TimeStamp as float)*1440 as bigint) as float)/1440 as datetime)

Médias por hora:

SELECT CAST(CAST(CAST(CAST(E3TimeStamp as float)*24 as bigint) as float)/24 as datetime) as Hora, AVG(Campo) as Média
FROM Tabela
GROUP BY CAST(CAST(CAST(CAST(E3TimeStamp as float)*24 as bigint) as float)/24 as datetime)
ORDER BY CAST(CAST(CAST(CAST(E3TimeStamp as float)*24 as bigint) as float)/24 as datetime)

Médias por dia:

SELECT CAST(FLOOR(CAST(E3TimeStamp as float)) as datetime) as Dia, AVG(Campo) as Média
FROM Tabela
GROUP BY CAST(FLOOR(CAST(E3TimeStamp as float)) as datetime)

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

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

Comentários em “Obtendo médias de tempo (minutos, horas e dias) em um banco de dados SQL Server.

    1. Olá Romulo,
      Sim, basta inserir duas variáveis para realizar o filtro por data.
      Por exemplo:

      SELECT CAST(FLOOR(CAST(E3TimeStamp as float)) as datetime) as Dia, AVG(Campo) as Média
      FROM Tabela
      WHERE ( Tabela.E3TimeStamp > #<%DataIni%># AND Tabela.E3TimeStamp < #<%DataFim%># )
      GROUP BY CAST(FLOOR(CAST(E3TimeStamp as float)) as datetime)

      Para setar as variáveis em runtime, utilize o método SetVariableValue.

  1. Boa noite,
    Tenho uma base de dados que armazena informações a cada 9 segundos. Preciso da média de cada hora, como montar um script para esse propósito?

    1. Olá Eliziario,

      Não é necessário criar um script para realizar a média de cada hora, basta utilizar a sintaxe do item Médias por hora deste artigo em um objeto consulta:

      Média

      Outra alternativa seria utilizar os recursos do próprio Relatório para calcular a média, conforme o artigo https://kb.elipse.com.br/kb37429-agrupando-dados-no-relatorio/.
      Para agrupar por hora, utilizar no DataField a expressão ‘=Hour(E3TimeStamp)’.

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *