|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
[SQL] Estrarre l'ultima tupla per ciascun gruppo
Ciao ragazzi,
vi presento uno schema molto semplificato del DB sul quale devo lavorare. Immaginate che si tratti di un elenco di eventi per ciascuna partita di calcio e che ogni partita abbia un proprio ID univoco. ID_PARTITA .... DATA_EVENTO Il campo ID_PARTITA è numerico, mentre DATA_EVENTO è di tipo DATETIME (data e ora). A me interessa estrarre PER OGNI PARTITA l'ultimo evento in ordine temporale. Per ultimo evento intendo TUTTA LA TUPLA, non solo la data. Pensavo di riuscire a risolvere semplicemente così: Codice:
SELECT * FROM EVENTI_PARTITE GROUP BY ID_PARTITA, DATA_EVENTO DESC LIMIT 1 Tenete presente che la tabella ha circa 10 milioni di tuple. Grazie anticipatamente
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
intanto dovresti spiegare meglio la struttura del db, ho dovuto rileggere 3 volte.
da quello che ho capito hai la tabella in questo modo: ID_PARTITA | DATA_EVENTO | CAMPO1 | ... 1 | 05/03/2013 | x 1 | 06/03/2013 | y 1 | 04/03/2013 | z 2 | 01/01/2013 | a 2 | 02/01/2013 | b e tu vorresti che fossero restituiti questi dati: ID_PARTITA | DATA_EVENTO | CAMPO1 | ... 1 | 06/03/2013 | y 2 | 02/01/2013 | b nella tua query è normale che ti esca un solo risultato visto che hai messo LIMIT 1 per ora ci penso, ma almeno se altri leggono è più chiaro ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Esattamente
![]() Tutto corretto ![]() In pratica dovrei riuscire a raggruppare per ID_PARTITA e a trovare la tupla col valore massimo della DATA_EVENTO
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
giocare con having?
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
dovresti risolvere con questa query:
SELECT * FROM EVENTI_PARTITE AS EVENTI INNER JOIN (SELECT ID_PARTITA AS ULTIMO_ID_PARTITA, MAX(DATA_EVENTO) AS ULTIMO_EVENTO FROM EVENTI_PARTITE GROUP BY ID_PARTITA) AS ULTIMI_EVENTI ON EVENTI.ID_PARTITA = ULTIMI_EVENTI.ULTIMO_ID_PARTITA AND EVENTI.DATA_EVENTO = ULTIMI_EVENTI.ULTIMO_EVENTO |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Intanto ti ringrazio per la risposta
![]() intendi qualcosa di simile? Codice:
SELECT * FROM EVENTI_PARTITE GROUP BY ID_PARTITA HAVING [...]
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Quote:
Ti ringrazio, provo subito ![]()
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Quote:
![]() Pensavo impiegasse una vita, visto il JOIN, invece me la esegue in pochissimi secondi. Grazie mille ![]()
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:21.