Buongiorno a tutti,
Sto realizzando un programma in Access ricco di queries, ma su questa non mi riesce proprio di andare avanti.
Devo realizzare una query per trovare i morosi nei pagamenti della quota associativa dell'anno in corso. Ovviamente risulterà moroso chiunque non ha pagato dal primo gennaio dell'anno in corso. Una volta inserito il pagamento nella tabella, non dovrà risultare più moroso.
Le tabelle che vengono utilizzate in questa query sono due: aziende (che contiene tutti i dati dell'aziende che vanno mostrati nel risultato, come id, nome azienda, numero telefono ecc.) e pagamenti, che contiene una lista di ogni pagamento fatto da quell'azienda nel corso degli anni.
Tra i risultati deve anche comparire per ogni azienda che è in mora da quanto è che non paga la quota associativa, che tradotto in parole povere per ogni record deve risultare l'ultimo pagamento effettuato da quell'azienda, che è contenuto nella tabella pagamenti.
Ho provato a fare due queries, ma entrambe non funzionano.
Infatti, una mi fa vedere i vari record con la data dell'ultimo pagamento uguale per tutti
SELECT Aziende.[ID], Aziende.[NomeAzienda], Aziende.[Cognome amm], Aziende.[Nome amm], Aziende.[Attività], Aziende.[Numero Tel], Aziende.[Email], (SELECT Last(pagamenti.[Datapagam]) FROM Pagamenti INNER JOIN aziende ON pagamenti.Azienda = Aziende.ID WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()))) AS UltimoPag
FROM Aziende
WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()))
AND aziende.[disdetto/radiato] = false;
Mentre la seconda mi fa vedere solo un record che ha la data dell'ultimo pagamento più recente
SELECT Aziende.[ID], Aziende.[NomeAzienda], Aziende.[Cognome amm], Aziende.[Nome amm], Aziende.[Attività], Aziende.[Numero Tel], Aziende.[Email], Pagamenti.DataPagam
FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda
WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()))
AND Pagamenti.Datapagam = (SELECT MAX(pagamenti.[Datapagam]) FROM Pagamenti INNER JOIN aziende ON pagamenti.Azienda = Aziende.ID WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now())))
AND aziende.[disdetto/radiato] = false;
Ho scritto questo titolo perchè nel forum non ho trovato niente a riguardo, spero possa servire agli altri utenti in futuro!
Grazie mille!

Rispondi quotando