[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