Il problema è un tantino più complicato.

In pratica ho due tabelle e devo estrarre da una dei dati in dipendenza dei valori dell’altra.

Il campo comune è la matricola e la tabella su cui si agisce possiede dei record con una decina di campi; in ognuno dei record sono presenti tre campi sui quali mi trovo ad agire.

Supponiamo i miei campi siano : TIPO, DATA e MATRICOLA .

Il campo TIPO può assumere 3 valori (C,P,T).
Il tipo record “C” è sempre presente, il tipo record “P” e presente solo se è presente il tipo “C” ed il tipo”T “ è presente solo se c’è il “C” e il “P”.

Io dovrei estrarre i record di:
Tutte le matricole con tipo record “C” che non hanno un tipo record “T” o un tipo record “P” e la cui data è minore della data odierna (2011-04-09)

Se il tipo “P” è presente, allora

devo estrarre tra quelli che hanno tipo “P”, ma non tipo "T", quello con con data massima, minore della data odierna. (2011-04-09)

In soldoni, da questi record :
codice:
Tipo			data				MATRICOLA
C			2011-01-01				10		
P			2011-02-11				10		
P			2010-03-10				10			

T			2010-10-12				11	
P			2010-08-03				11
C			2010-02-07				11

P			2010-07-03				12
C			2010-02-07				12

C			2010-04-08				13
Devo ottenere:

codice:
P			2010-03-10				10			
C			2010-04-15				13
La questione sembra complicata. Io mi sono arenato sulla data max.

codice:
(select distinct * FROM tabellaA
		where matricola
		not in (select matricola  from tabellaB  where TIPO = 'T' or TIPO = 'P')
		and data_fine < CURRENT_DATE() 
		group by matricola
	    )
	    union
	    (
	    select distinct * from tabellaA
		where matricola
		not in (select matricola from tabellaB where TIPO = 'T')
		and matricola in (select matricola from tabellaB where TIPO = 'P')
                         and TIPO = 'P'        
                 and data_fine < CURRENT_DATE()   
		group by matricola	    )
	    order by matricola";
Così non funge perché prende il primo record di tipo “P” che gli capita e non quello con data max.

Chi ha tanta pazienza da provare a darmi una mano?