Ireport - Comparar com registro anterior

12 respostas
E

Pessoal, meu subrelatório tem um campo data_inicio e está ordenada por ordem deste campo. Gostaria de, se existir mais de um registro na tabela, armazenar em uma variável a diferença da data de inicio de um registro com a data de inicio do registro anterior. Como poderia montar isso ?

Obrigado

Eduardo

12 Respostas

G

pq vc n faz diretamente pelo banco de dados??
seria bem mais facil…

E

Hummm Utilizo banco de dados mysql. Gostaria de comparar a data de uma tupla com a anterior. Não da mesma tupla. Tem como fazer isso pelo comando sql ?

Obrigado

G

bom voce pode tentar fazer um subselect da propria tabela pedindo o valor anterior…

poderia ajudar melhor se voce postar a estrutura da tabela :slight_smile:

E

select id_gestacao, data_inicio, outro_reprodutor, novilha, interrompida, provavelsecagem, realsecagem, provavelparto, realparto, finalizada, brinco_filho, anotacoes, id_reprodutor, id_animl, id_seme, DATEDIFF(realparto,data_inicio) as Diferenca from gestacao where id_animl = $P{idanimalgestante} order by data_inicio

Queria comparar a data_inicio de uma gestacao com a data_inicio da próxima para calcular o tempo de espera entre cada gestação.

Vlw

G

select montado por Danilo Pacheco Martins

Supondo que “id_gestação” seja do tipo INT, unico e sequencial… segue:

select g1.id_gestacao, g1.data_inicio, g1.outro_reprodutor, g1.novilha, g1. interrompida, g1.provavelsecagem, g1.realsecagem, g1.provavelparto, g1.realparto, g1. finalizada, g1.brinco_filho, g1.anotacoes, g1.id_reprodutor, g1.id_animl, g1.id_seme, DATEDIFF(g1.realparto,g1.data_inicio) as Diferenca,
DATEDIFF(g1.data_inicio,(select g2.data_inicio from gestacao g2 where g1.id_gestacao + 1 = g2.id_gestacao )) as Diferenca_Gestacao from gestacao g1 where id_animl = $P{idanimalgestante} order by data_inicio

E

Interessante. Só que nesse caso, acredito que com esse comando “select g2.data_inicio from gestacao g2 where g1.id_gestacao + 1 = g2.id_gestacao” eu poderia estar pegando a gestação de outro animal. No meu caso tem que ser do mesmo animal.

G

isso vc n tinha me informado :confused:

E

Foi mal. Mas tem o " where id_animl = $P{idanimalgestante} " no comando

G

select g1.id_gestacao, g1.data_inicio, g1.outro_reprodutor, g1.novilha, g1. interrompida, g1.provavelsecagem, g1.realsecagem, g1.provavelparto, g1.realparto, g1. finalizada, g1.brinco_filho, g1.anotacoes, g1.id_reprodutor, g1.id_animl, g1.id_seme, DATEDIFF(g1.realparto,g1.data_inicio) as Diferenca,
DATEDIFF(g1.data_inicio,(select g2.data_inicio from gestacao g2 where g1.id_gestacao < g2.id_gestacao order by g2.id_gestacao limit 1)) as Diferenca_Gestacao from gestacao g1 where id_animl = $P{idanimalgestante} order by data_inicio;

pronto, agora pega por animal

E

Funcionou perfeitamente. Muito obrigado.

Aproveitando, para finalizar, defini duas variáveis no meu subrelatório do ireport. Porém no meu report principal onde defino a subreport variable somente aparece as variavies padrão do ireport e não as que defini também. Uso a versão 3.7.4. Algum bug ou devo definí-las em mais algum local ?

Obrigado

G

olha cara acho que voce esta confundindo com a variavel que aponta a localização do relatorio

até onde eu sei as variaveis de cada relatorio/subrelatorio só podem ser manipuladas pelo proprio, a comunicação entre relatorio e subrelatorio são os parametros

F

Vc pode passar as variaveis para o subrelatorio sim. Dah uma checada nas propriedades do sub-relatorio que vc encontra.

Se vc usase um DataSource proprio acredito que conseguiria fazer esse controle de datas no codigo msm.

Att

Criado 1 de setembro de 2010
Ultima resposta 8 de set. de 2010
Respostas 12
Participantes 3