Selecionar Dados em Intervalos

Delphi

12/03/2013

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!
Laérciolima

Laérciolima

Curtidas 0

Respostas

Francisco Macário

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.
GOSTEI 0
Laérciolima

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!
GOSTEI 0
Joel Rodrigues

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

Laérciolima

12/03/2013

como seria esse agrupamento? não estou compreendendo!
GOSTEI 0
Francisco Macário

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

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

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.
GOSTEI 0
POSTAR