Selecionar Dados em Intervalos
Olá,
tenho um banco de dados firebird 1.5, no mesmo uma tabela que grava informações a cada 1 segundo.
usando o comando BETWEEN consigo pesquisar em intervalos. exemplo:
tem um campo datahora do tipo TIMESTAMP.
então eu mando os dois valores via parametros.
select * from POCO_ITEM where COD_POCO=:COD_POCO and DATA_HORA between :data_horaINI and :data_horaFIN
COM ISSO EU CONSIGO PESQUISAR ENTRE UM INTERVALO DE TEMPO (DATAHORA) INICIAL E FINAL, mas como os dados são gravados a cada 1 segundo, ele me mostra todos os dados a cada um segundo claro.
mas eu quero fazer essa mesma CONSULTA, sendo que ele me retorne os dados a cada 1 minuto, no intervalo que eu escolhi.
tem como fazer isso?
Obrigado! Deus te abençoe!
tenho um banco de dados firebird 1.5, no mesmo uma tabela que grava informações a cada 1 segundo.
usando o comando BETWEEN consigo pesquisar em intervalos. exemplo:
tem um campo datahora do tipo TIMESTAMP.
então eu mando os dois valores via parametros.
select * from POCO_ITEM where COD_POCO=:COD_POCO and DATA_HORA between :data_horaINI and :data_horaFIN
COM ISSO EU CONSIGO PESQUISAR ENTRE UM INTERVALO DE TEMPO (DATAHORA) INICIAL E FINAL, mas como os dados são gravados a cada 1 segundo, ele me mostra todos os dados a cada um segundo claro.
mas eu quero fazer essa mesma CONSULTA, sendo que ele me retorne os dados a cada 1 minuto, no intervalo que eu escolhi.
tem como fazer isso?
Obrigado! Deus te abençoe!
Laérciolima
Curtidas 0
Respostas
Francisco Macário
12/03/2013
Olá faça sua consulta usando agrupamento.
formatando o campo DATA_HORA para desconsiderar os segundos e milesegundos.
Espero que a ideia lhe ajude.
formatando o campo DATA_HORA para desconsiderar os segundos e milesegundos.
Espero que a ideia lhe ajude.
GOSTEI 0
Laérciolima
12/03/2013
não posso modificar o banco de dados, ele foi passado por um cliente, e é usado por outro sistema, o meu sistema é um gerador de relatorio, e vai trabalhar em conjunto com o sistema dele.
o campo data_hora é gravado assim, (30/10/2009 13:07:33)
quando dou um select usando between ele retorna assim, exemplo pesquisar entre 30/10/2009 13:10:00 e 30/10/2009 13:15:00 RESULTADO:
30/10/2009 13:10:00
30/10/2009 13:10:01
30/10/2009 13:10:02
30/10/2009 13:10:03
30/10/2009 13:10:04
30/10/2009 13:10:05
...................
até chegar ao final
30/10/2009 13:15:00.
Mais o que eu quero é que retorne assim:
30/10/2009 13:10:00
30/10/2009 13:11:00
30/10/2009 13:12:00
30/10/2009 13:13:00
30/10/2009 13:14:00
30/10/2009 13:15:00
Obrigado pela intenção!
Alguem? Obrigado!
o campo data_hora é gravado assim, (30/10/2009 13:07:33)
quando dou um select usando between ele retorna assim, exemplo pesquisar entre 30/10/2009 13:10:00 e 30/10/2009 13:15:00 RESULTADO:
30/10/2009 13:10:00
30/10/2009 13:10:01
30/10/2009 13:10:02
30/10/2009 13:10:03
30/10/2009 13:10:04
30/10/2009 13:10:05
...................
até chegar ao final
30/10/2009 13:15:00.
Mais o que eu quero é que retorne assim:
30/10/2009 13:10:00
30/10/2009 13:11:00
30/10/2009 13:12:00
30/10/2009 13:13:00
30/10/2009 13:14:00
30/10/2009 13:15:00
Obrigado pela intenção!
Alguem? Obrigado!
GOSTEI 0
Joel Rodrigues
12/03/2013
Rapaz, acho que nesse caso você precisará agrupar pelo campo DATAHORA, formatando-o para não exibir os segundos.
GOSTEI 0
Laérciolima
12/03/2013
como seria esse agrupamento? não estou compreendendo!
GOSTEI 0
Francisco Macário
12/03/2013
como seria esse agrupamento? não estou compreendendo!
Olá.
Bom primeiro você deve pesquisar como mostrar no FB 1.5 campo TimeStamp ou Datetime sem mostrar os segundos, como mostrar apenas a data+hora+minutos.
faça um teste com sua instrução +/- assim
select
COD_POCO, DATA_HORA
from
POCO_ITEM
where
COD_POCO=:COD_POCO and DATA_HORA between :data_horaINI and :data_horaFIN
group by
COD_POCO, DATA_HORA
Para maior entendimento pesquise por group by para FB 1.5.
Pesquise tambem por UDF que talvez voce tera que usar.
At.
GOSTEI 0
Joel Rodrigues
12/03/2013
Vamos lá. Se você tem registros gravados a cada 1 segundo e quer apenas os registros por minuto, eu vejo duas formas de fazer isso:
1 - Agrupando os registros pelo minuto. Dessa forma, você teria, por exemplo, o total somado a cada 1 minuto.
2 - Você seleciona todos os registros, formatando apenas o campo para não trazer os segundos. Dessa forma, você terá sempre a mesma quantidade de registros que tem hoje, apenas omitindo os segundos.
Por exemplo, supondo os seguintes registros:
Agrupando, você teria:
Repare que é um único registro equivalente aos três anteriores, só que agrupados pelo minuto.
No segundo caso, você teria:
Os mesmos 3 registros, só que sem os segundos.
1 - Agrupando os registros pelo minuto. Dessa forma, você teria, por exemplo, o total somado a cada 1 minuto.
2 - Você seleciona todos os registros, formatando apenas o campo para não trazer os segundos. Dessa forma, você terá sempre a mesma quantidade de registros que tem hoje, apenas omitindo os segundos.
Por exemplo, supondo os seguintes registros:
13/03/2013 17:05:00, 10 13/03/2013 17:05:01, 10 13/03/2013 17:05:02, 10
Agrupando, você teria:
13/03/2013 17:05, 30
Repare que é um único registro equivalente aos três anteriores, só que agrupados pelo minuto.
No segundo caso, você teria:
13/03/2013 17:05, 10 13/03/2013 17:05, 10 13/03/2013 17:05, 10
Os mesmos 3 registros, só que sem os segundos.
GOSTEI 0
Joel Rodrigues
12/03/2013
Opa, o Macário respondeu enquanto eu digitava. Mas é isso aí, esse é o script pra selecionar os dados agrupados.
Boa sorte.
Boa sorte.
GOSTEI 0