[firebase-br] Ajuda em SP
paulosxs Yahoo!
paulosxs em yahoo.com.br
Qui Maio 17 08:56:02 -03 2007
Marcelo Wollmer <marcelowollmer em yahoo.com.br> escreveu:
> Tenho duas tabelas, uma de PROCESSO, onde fica as informações dos mesmos e outra, HIST_PROCESSO, onde fica todos os históricos dos processos, ou seja, por onde (Departamento) o processo passou e onde ele está parado, a seguir, algumas informações das tabelas:
>
> PROCESSO
> ------------------
> NumProcesso
> AnoProcesso
> ValorReal
>
> HIST_PROCESSO
> ---------------------------
> NumProcesso
> AnoProceso
> De_ID_Depto
> Para_ID_Depto
> dtSaida
>
> Eu preciso montar uma SP, que, o usuário informando a Data de Saída (dtSaida), o departamento que enviou (De_ID_Depto) e em que departamento está parado o processo (Para_ID_Depto), me retornasse os números e anos do processo que estão na tabela de históricos (HIST_PROCESSO).
> Até ai, tudo bem, eu consigo.
>
> O que eu não consigo montar é, baseando-se nos números e anos dos processos filtrados acima (da tabela HIST_PROCESSO), eu retornar os dados da tabela de processos (PROCESSO).
>
> (...)
>
> E tem outro problema, eu utilizando a filtragem acima mencionado na tabela de históricos, eu vou saber que o processo "passou" pelo departamento (Para_ID_Depto), mas como saber se está "parado" alí ou se já foi para um outro departamento? Pois só quero saber quais os processos que estão "parados" no departamento informado.
Experimente assim:
select *
from Hist_Processo H
inner join Processo P
on P.NumProcesso=H.NumProcesso and P.AnoProcesso=H.AnoProcesso
where
H.DtSaida=:DtSaida
and H.De_Id_Depto=:De_Id_Depto
and H.Para_Id_Depto=:Para_Id_Depto
and
not
exists(
select null
from Hist_Processo HP
where
HP.NumProcesso=H.NumProcesso
and HP.AnoProcesso=H.AnoProcesso
and HP.DtSaida>H.DtSaida)
Obs:
- O inner join relaciona as duas tabelas.
- O not exists filtra apenas as últimas datas de saída dos processos.
Mais detalhes sobre a lista de discussão lista