Ciao a tutti, sono alle prese con una query, ma non sono riuscito a risolvere completamente.
In una tabella desidero prelevare solo i record dove data e ora corrispondono all'ultima data e ora di tutti i record inseriti per ogni id_com. (Vedi GROUP BY id_com nella query)
Questa è la mia tabella:
CREATE TABLE `miatable` (
`id` int(11) NOT NULL,
`id_com` int(11) NOT NULL,
`data` date NOT NULL,
`ora` time NOT NULL,
`stato_com` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Questa è la query che ho provato a formulare:
SELECT DISTINCT miatable.id_com, miatable.stato_com, miatable.data, miatable.ora FROM miatable
INNER JOIN
(SELECT MAX(data) AS ListaDate FROM miatable GROUP BY id_com) AS ItemData
ON ItemData.ListaDate = miatable.data
INNER JOIN
(SELECT MAX(ora) AS ListaOra FROM miatable GROUP BY id_com) AS ItemOra
ON ItemOra.ListaOra = miatable.ora
ORDER BY id_com ASC;
Ma non è corretta in quanto mi estrae anche altri record non richiesti.
id_com stato_com data ora
1 Terminato 2021-03-12 19:14:05
2 Terminato 2021-03-12 19:10:02
3 Terminato 2021-03-15 10:50:32
4 Terminato 2021-03-15 18:01:31
5 In Pausa 2021-03-15 15:42:16
6 Terminato 2021-03-15 12:15:33
7 In Pausa 2021-03-15 10:29:53
8 In Pausa 2021-03-15 15:38:29
10 In Pausa 2021-03-15 17:54:45
In particolare il record con id_com = 8 se guardo i dati, vedo che l'ultima data è il 2021-03-16 e non il 2021-03-15, mentre il campo ora è corretto. In pratica questa query non soddisfa entrambe le condizioni MAX(data) && MAX(ora) richieste.
Qualcuno mi sa dare qualche consiglio per capire come formulare la query in modo corretto?
Se dovesse servire il dump dei dati, lo potrei inviare anche tramite email.
Grazie anticipatamente
blackout69