Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

1. Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

Francisco Dantas
fjdoliveira

(usa Linux Mint)

Enviado em 01/11/2019 - 11:42h

Pessoal, estou fazendo um sistema de datalogger e gostaria de saber se existe alguma função intrínseca do MySQL para pegar, na tela de pesquisa de registros, o valor em um intervalo de tempo pré-definido, ou se eu devo programar para comparar se o timestamp é igual ou imediatamente superior ao anterior, criar um array e incluir nele os valores com esse tempo pré-definidos. Caso essa situação só se resolva com programação (No meu caso, estou usando PHP), a ideia de fazer um fetch de todos os registros no intervalo completo de interesse e testando a condição do tempo é a forma mais eficaz/elegante de se fazer?

Por exemplo, os registros são armazenados no banco de dados a cada 30 segundos, mas eu queria fazer um gráfico que pegue apenas os dados de hora em hora. Assim, eu pegaria o primeiro registro, em seguida, eu descartaria do gráfico os registros seguintes cujos valores fossem menores do que 1 hora em relação ao primeiro registro filtrado. Em seguida, iria inserir no gráfico o registro cujo valor fosse 1 hora maior do que o segundo registro filtrado, e assim, sucessivamente. Seria como usar o limit/offset, mas ao invés de filtrar pelo número do registro, seria pela data/hora.

Agradeço desde já o apoio


  


2. Re: Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/11/2019 - 14:15h

Boa tarde,

Você pode criar um campo DATETIME para ao ser inserido a hora do sistema no momento com o comando NOW()


fjdoliveira escreveu:

Pessoal, estou fazendo um sistema de datalogger e gostaria de saber se existe alguma função intrínseca do MySQL para pegar, na tela de pesquisa de registros, o valor em um intervalo de tempo pré-definido, ou se eu devo programar para comparar se o timestamp é igual ou imediatamente superior ao anterior, criar um array e incluir nele os valores com esse tempo pré-definidos. Caso essa situação só se resolva com programação (No meu caso, estou usando PHP), a ideia de fazer um fetch de todos os registros no intervalo completo de interesse e testando a condição do tempo é a forma mais eficaz/elegante de se fazer?

Por exemplo, os registros são armazenados no banco de dados a cada 30 segundos, mas eu queria fazer um gráfico que pegue apenas os dados de hora em hora. Assim, eu pegaria o primeiro registro, em seguida, eu descartaria do gráfico os registros seguintes cujos valores fossem menores do que 1 hora em relação ao primeiro registro filtrado. Em seguida, iria inserir no gráfico o registro cujo valor fosse 1 hora maior do que o segundo registro filtrado, e assim, sucessivamente. Seria como usar o limit/offset, mas ao invés de filtrar pelo número do registro, seria pela data/hora.

Agradeço desde já o apoio





3. Re: Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

Francisco Dantas
fjdoliveira

(usa Linux Mint)

Enviado em 01/11/2019 - 15:00h

O campo já é do tipo "datetime" e ele já está salvando no banco de dados corretamente. O registro é atualizado no banco de dados a cada 30 segundos e, às vezes, ele até demora 1 ou 2 segundos a mais para salvar. O que eu desejo é que no gráfico apareçam apenas os dados que tenham o intervalo selecionado pelo usuário. Além do período (data e hora) do relatório (Que fiz o filtro usando o BETWEEN), existe um campo do tipo "select" e outro do tipo "text" que serve para selecionar o intervalo de tempo de amostragem dos dados no gráfico. Por exemplo, se o usuário digitar "1" e escolher a opção "hora", o gráfico exibirá apenas os registros de hora em hora, ocultando todos os outros do tempo 30 segundos a 59:30. Assim, ele irá exibir os dados que foram salvos, por exemplo, às 17:00, 18:00, 19:00, etc. Se o usuário digitar "15" e escolher a opção "minutos", no gráfico, será exibido no gráfico os dados que foram salvos no banco de dados às 17:00, 17:15, 17:30, 17:45, 18:00, 18:15, etc.

wellingtonjoao escreveu:

Boa tarde,

Você pode criar um campo DATETIME para ao ser inserido a hora do sistema no momento com o comando NOW()


fjdoliveira escreveu:

Pessoal, estou fazendo um sistema de datalogger e gostaria de saber se existe alguma função intrínseca do MySQL para pegar, na tela de pesquisa de registros, o valor em um intervalo de tempo pré-definido, ou se eu devo programar para comparar se o timestamp é igual ou imediatamente superior ao anterior, criar um array e incluir nele os valores com esse tempo pré-definidos. Caso essa situação só se resolva com programação (No meu caso, estou usando PHP), a ideia de fazer um fetch de todos os registros no intervalo completo de interesse e testando a condição do tempo é a forma mais eficaz/elegante de se fazer?

Por exemplo, os registros são armazenados no banco de dados a cada 30 segundos, mas eu queria fazer um gráfico que pegue apenas os dados de hora em hora. Assim, eu pegaria o primeiro registro, em seguida, eu descartaria do gráfico os registros seguintes cujos valores fossem menores do que 1 hora em relação ao primeiro registro filtrado. Em seguida, iria inserir no gráfico o registro cujo valor fosse 1 hora maior do que o segundo registro filtrado, e assim, sucessivamente. Seria como usar o limit/offset, mas ao invés de filtrar pelo número do registro, seria pela data/hora.

Agradeço desde já o apoio







4. Re: Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

Adalberto G4d31h4
Borg_Atomic

(usa KDE Neon)

Enviado em 01/11/2019 - 18:02h

Eu tentaria assim
$dia='2019-11-01';
$horaninicial='17:00:00';
$horafinal='17:59:59';

SELECT * FROM tabela where DATE(coluna)='$dia' and TIME(coluna)>='$horainicial' and TIME(coluna)<='$horafinal'


5. Re: Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

Francisco Dantas
fjdoliveira

(usa Linux Mint)

Enviado em 02/11/2019 - 11:43h

Os dados são salvos no banco de dados a cada 30 segundos, mas criei um campo para definir a unidade (minutos, horas, semanas, meses, etc.) e a quantidade ("15" minutos, "8" horas, etc.) para o usuário escolher o intervalo de exibição de dados no período informado. Por exemplo, se o usuário quiser o período entre 01/10/2019 às 15:00 e 10/10/2019 às 19:01, com intervalo de 15 minutos, devem ser exibidos os registros cujo registro dataHora seja 15:00, 15:15, 15:30, 15:45, etc. e não serão exibidos todos os registros a cada 30 segundos. Estou usando o seguinte SQL:

SELECT * FROM tabela WHERE dataHora BETWEEN "2019/10/01 15:00" AND "2019/10/10 19:01" GROUP BY DATE_ADD(DATE_FORMAT(dataHora, '%Y-%m-%d %H %i'), INTERVAL 15 MINUTE) ORDER BY id desc

Mas só são exibidos os registros a cada 1 hora

Borg_Atomic escreveu:

Eu tentaria assim
$dia='2019-11-01';
$horaninicial='17:00:00';
$horafinal='17:59:59';

SELECT * FROM tabela where DATE(coluna)='$dia' and TIME(coluna)>='$horainicial' and TIME(coluna)<='$horafinal'





6. Re: Filtrar registros com intervalos de tempo pré-definidos no MySQL, usando PHP

Adalberto G4d31h4
Borg_Atomic

(usa KDE Neon)

Enviado em 03/11/2019 - 13:47h

Então...Em MYSQL existem funções chamadas MINUTE, SECOND, HOUR
A solução não profissional seria encher de AND, acrescentando ao código: AND MINUTE(dataHora)=15 and MINUTE(dataHora)=30 AND...
A solução profissional seria usar a função módulo(MOD) do MYSQL, dividindo por 15, resultando em zero no resto da divisão,só testando: AND MOD((MINUTE(dataHora)),15)=0






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts