Paulo,

Dependendo do seu banco, as soluções podem diferir em muito no quesito 
performance. Mas a idéia é a seguinte- você quer um item de detalhe do 
registro mestre que obedece a um critério superlativo- é o máximo em 
termos de data de coleta (imagino).


SELECT
   P.<campo1>,
   P.<campo2>,
   ...,
   U.<campo1>,
   U.<campo2>,
   ...
FROM
   Pacientes P
   INNER JOIN Urina U ON (P.CodPaciente = U.CodPaciente)
WHERE
   U.DataColeta = (SELECT MAX(UI.DataColeta) FROM Urina UI
                   WHERE UI.CodPaciente = P.CodPaciente)


Agora perceba que essa sintaxe será admitida apenas pelos SGBDs que 
suportam subconsultas correlacionadas (correlated subqueries). Há um 
risco potencial caso seu campo DataColeta seja apenas *data* e não *data 
e hora* ou *timestamp* pois, se duas coletas forem realizadas no mesmo 
dia, o SELECT externo acima irá retornar aleatoriamente (do ponto de 
vista do usuário) um dos exames dessa data. Outra forma é a seguinte:


SELECT
   P.<campo1>,
   P.<campo2>,
   ...,
   U.<campo1>,
   U.<campo2>,
   ...
FROM
   Pacientes P
   INNER JOIN Urina U ON (P.CodPaciente = U.CodPaciente)
   INNER JOIN (SELECT
                 UI.CodPaciente,
                 MAX(UI.DataColeta) as DataColeta
               FROM Urina UI
               GROUP BY UI.CodPaciente) UMAX ON
   (UMAX.CodPaciente=U.CodPaciente AND UMAX.DataColeta=U.DataColeta)


Nessa segunda forma, novamente você terá problemas com o banco caso não 
haja suporte para subconsultas na cláusula FROM.

Se fosse comigo, e essa informação fosse realmente útil e consultada com 
muita freqüência, incluiria um campo redundante na tabela de paciente 
para identificar o último exame de urina realizado pelo paciente. Isso 
pode ser feito através de um trigger de inclusão na tabela de Exame de 
Urina.

Existem outras formas de fazer.

Cordialmente,

Demian Lessa
Salvador - Brasil

Paulo Cesar Rohleder wrote:
> Um bom dia a todos 
> 
> sou iniciante em SQL... e preciso urgente resolver este problema...
> Tenho a tabela de pacientes...
>     CodPaciente
>     Paciente
>     etc.....(outros campos do paciente)
> e a tabela de Urina
>     CodExameUrina
>     CodPaciente
>     Paciente
>     DataColeta 
>     etc  (outros campos do exame)
> Digamos que voce seja um paciente e tenha feito na ultima semana dois exames
> de urina e quero imprimir o resultado do ultimo exame...
> Como faço isso em SQL 


-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a