Selecionar Dados em Intervalos

12/03/2013

2

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!
Responder

Posts

Olá faça sua consulta usando agrupamento.

formatando o campo DATA_HORA para desconsiderar os segundos e milesegundos.

Espero que a ideia lhe ajude.
Responder

12/03/2013

Laérciolima

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!
Responder

12/03/2013

Joel Rodrigues

Rapaz, acho que nesse caso você precisará agrupar pelo campo DATAHORA, formatando-o para não exibir os segundos.
Responder

12/03/2013

Laérciolima

como seria esse agrupamento? não estou compreendendo!
Responder
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.
Responder

12/03/2013

Joel Rodrigues

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

12/03/2013

Joel Rodrigues

Opa, o Macário respondeu enquanto eu digitava. Mas é isso aí, esse é o script pra selecionar os dados agrupados.
Boa sorte.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira