|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
[SQL] Rimuovere tuple parzialmente duplicate
Ciao ragazzi, ho una tabella approssimabile come segue:
ID_ PARTITA (int) | ID_GIOCATORE (int) | EVENTO (varchar) | ORARIO (datetime) Purtroppo mi capitano dei casi del tipo: ID_ PARTITA | ID_GIOCATORE | EVENTO | ORARIO Z | X | Corre | 2012-09-05 15:26:51 Z | Y | Corre | 2012-09-05 15:26:51 In pratica, mi succede che nello stesso istante due giocatori diversi facciano la stessa cosa e che dunque esistano due tuple parzialmente duplicate. Io sono interessato a mantenere tra le due o le tre parzialmente duplicate ESCLUSIVAMENTE quella che compare per ultima all'interno del database. Ad esempio, rispetto al caso che ho prospettato, voglio mantenere solo Z | Y | Corre | 2012-09-05 15:26:51 più chiaramente tutte le altre. Semplicemente, quando ci sono dei casi come quello indicato, voglio tenere l'ultima. Come potrei fare? Grazie anticipatamente. Alberto
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) Ultima modifica di swarzy85 : 14-03-2013 alle 14:54. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
group by* ?
una cosa tipo select ID_PARTITA, max(ID_GIOCATORE), EVENTO, ORARIO group by ORARIO
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go Ultima modifica di The_ouroboros : 14-03-2013 alle 15:15. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Ciao, grazie per la risposta
![]() Non ho capito cosa intendi precisamente. Con la query che hai scritto, dovrei visualizzare esattamente ciò che vedo, raggruppando per altro per orario. Probabilmente non mi son spiegato chiaramente. Io devo proprio ELIMINARE delle tuple. Presento di seguito un esempio più calzante: ID_ PARTITA | ID_GIOCATORE | EVENTO | ORARIO A | T | Tira | 2012-09-05 13:20:41 C | U | Passa | 2012-09-05 13:48:23 D | L | Parla con l'arbitro | 2012-09-05 13:52:06 D | N | Parla con l'arbitro | 2012-09-05 13:52:06 G | W | Tira | 2012-09-05 14:08:47 Z | X | Corre | 2012-09-05 15:26:51 Z | Y | Corre | 2012-09-05 15:26:51 In tal caso, rispetto ai due insiemi di tuple indicati, dovrei lasciare sempre e solo l'ultima tupla, ottenendo la seguente tabella: ID_ PARTITA | ID_GIOCATORE | EVENTO | ORARIO A | T | Tira | 2012-09-05 13:20:41 C | U | Passa | 2012-09-05 13:48:23 D | N | Parla con l'arbitro | 2012-09-05 13:52:06 G | W | Tira | 2012-09-05 14:08:47 Z | Y | Corre | 2012-09-05 15:26:51
__________________
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
|
ID_GIOCATORE sono successivi?
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Purtroppo no, sono casuali e non c'è alcuna relazione di ordine.
Adesso ho pensato di aggiungere un campo autoincrementale nella tabella, di raggruppare per ID_PARTITA e ORARIO e di usare ASC LIMIT 1 per selezionare solo l'ultima. Adesso provo subito se va ![]()
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Feb 2003
Città: Milano
Messaggi: 7013
|
Risolto tramite l'aggiunta del campo incrementale, raggruppando e poi usando nell'having l'operatore MAX
![]()
__________________
Presidente comitato mondiale Anti-Troll La gloria la si deve acquistare, l'onore invece basta non perderlo. (Schopenhauer) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:50.