I'm trying to retrieve from two tables related one-to-many (Subattivita.ID-Eventi-IDSubattivita), some fields from first table and two other fields to the second table (last Eventi.Evento and first Eventi.DataInserimento).
I don't know why I get an error with the following SQL query. Can someone help, please?
First Table: Subattivita
ID | Contenuto |
---|---|
1 | Prova |
2 | Prova2 |
3 | Prova3 |
4 | prova4 |
5 | Prova5 |
6 | Prova6 |
7 | prova7 |
9 | Realizzare disegno |
10 | Prova8 |
Second Table: Eventi
ID | IDSubattivita | Evento | Commento | DataInserimento |
---|---|---|---|---|
1 | 1 | Aperta | Inserimento automatico | 01/08/2024 |
2 | 2 | Aperta | Inserimento automatico | 01/08/2024 |
3 | 3 | Aperta | Inserimento automatico | 01/08/2024 |
4 | 4 | Aperta | Inserimento automatico | 01/08/2024 |
5 | 5 | Aperta | Inserimento automatico | 02/08/2024 |
8 | 6 | Aperta | Inserimento automatico | 02/08/2024 |
9 | 7 | Aperta | Inserimento automatico | 02/08/2024 |
12 | 9 | Aperta | Inserimento automatico | 02/08/2024 |
13 | 10 | Aperta | Inserimento automatico | 02/08/2024 |
14 | 1 | Remarks | Testo1 | 05/08/2024 |
15 | 2 | Remarks | Testo2 | 05/08/2024 |
16 | 3 | Remarks | Testo3 | 06/08/2024 |
17 | 4 | Remarks | Testo4 | 06/08/2024 |
18 | 5 | Remarks | Testo5 | 07/08/2024 |
19 | 6 | Remarks | Testo8 | 08/08/2024 |
20 | 7 | Remarks | Testo9 | 09/08/2024 |
21 | 9 | Remarks | Testo12 | 09/08/2024 |
22 | 9 | Remarks | Procedi con disegno. | 09/08/2024 |
23 | 9 | Caricata | Disegno caricato. | 09/08/2024 |
24 | 9 | Chiusa | Disegno approvato | 09/08/2024 |
Required results of query:
ID | LastEvento | FirstDataInserimento |
---|---|---|
1 | Remarks | 01/08/2024 |
2 | Remarks | 01/08/2024 |
3 | Remarks | 01/08/2024 |
4 | Remarks | 01/08/2024 |
5 | Remarks | 02/08/2024 |
6 | Remarks | 02/08/2024 |
7 | Remarks | 02/08/2024 |
9 | Chiusa | 02/08/2024 |
10 | Aperta | 02/08/2024 |
I've tried with the following SQL query, but Access asks to enter the u.Evento value:
SELECT
t.ID,
u.Evento as LastEvento,
p.DataInserimento as FirstDataInserimento
FROM
((Subattivita t
INNER JOIN
(SELECT IDSubattivita, MAX(ID) as MaxID FROM Eventi GROUP BY IDSubattivita) u ON t.ID = u.IDSubattivita)
INNER JOIN
(SELECT IDSubattivita, MIN(ID) as MinID FROM Eventi GROUP BY IDSubattivita) p ON t.ID = p.IDSubattivita);
That's not an error message. It is a prompt from query for input of value because query references field(s) not in dataset - as noted by @TimRoberts. Looks like you want the Min(DataInserimento) for each IDSubattivita. Pulling Evento associated with maximum ID for each IDSubattivita is more complicated. Consider:
SELECT Q.IDSubattivita, Evento AS LastEvento, FirstDataInserimento FROM Eventi INNER JOIN
(SELECT Eventi.IDSubattivita, Max(Eventi.ID) AS EID,
Min(Eventi.DataInserimento) AS FirstDataInserimento FROM Eventi
GROUP BY Eventi.IDSubattivita) AS Q
ON Eventi.ID=Q.EID;
Or this version:
SELECT Subattivita.ID, Contenuto,
(SELECT TOP 1 Evento FROM Eventi AS Dup
WHERE IDSubattivita=Subattivita.ID ORDER BY ID DESC) AS LastEvento,
(SELECT TOP 1 DataInserimento FROM Eventi AS Dup WHERE
IDSubattivita=Subattivita.ID ORDER BY ID) AS FirstDataInserimento
FROM Subattivita;