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?