Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [SQL] select distinct per eliminare doppioni e tenere uno specifico tra i due

    Ciao a tutti,
    devo estrarre dei dati da una tabella. Vorrei pero' eliminare i doppioni secondo la mail.
    Quindi la mia query potrebbe essere
    codice:
    select distinct (mail) from tabella order by punteggio desc, tempo desc
    ....
    Se così faccio mi da errore...
    se metto tutti i campi che mi interessano
    codice:
    select distinct (mail),nome,citta,punteggio,tempo from tabella order by punteggio desc, tempo desc
    non mi restituisce i valori unici...

    Lo scopo principale sarebbe prendere il punteggio maggiore tra 2 dati registrati che hanno la stessa mail...
    Avete qualche suggerimento o metodo ?
    Grazie!!

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select tab2.* from
    (select max(punteggio) as maggiore from tabella
    group by mail) as tab1
    left join tabella as tab2 on tab1.maggiore = tab2.punteggio

  3. #3
    Ciao,
    dovrei quindi fare 2 tabelle ?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da pettedemon
    Ciao,
    dovrei quindi fare 2 tabelle ?
    Non devi fare 2 tabelle. Prova la query.

  5. #5
    Ciao,
    ho provato a inserire il codice pero' non cambia nulla, i valori con la stessa mail vengono duplicati e non viene tenuto solo il valore della mail unica....

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da pettedemon
    Ciao,
    ho provato a inserire il codice pero' non cambia nulla, i valori con la stessa mail vengono duplicati e non viene tenuto solo il valore della mail unica....
    Mi sembra strano.
    Posta qualche record fittizio per poter fare una prova.

  7. #7
    questo è il codice
    codice:
    select tab2.* from
    (select max(punteggio) as maggiore from tabella
    group by mail) as tab1
    left join ttabella as tab2 on tab1.maggiore = tab2.punteggio
     order by punteggio desc, tempo desc limit 50 offset 0
    e questo il risultato
    codice:
    1 	stefano 	jioojijoo 	ve 	75 	756
    2 	stefano 	jioojijoo 	ve 	75 	756
    3 	j 	oij 	oi 	75 	6873
    4 	j 	oij 	oi 	75 	6873
    5 	gino 	iop 	iop 	50 	581
    6 	stefano 	mkllkjm 	ve 	50 	570
    7 	jio 	joi 	jiojio 	50 	1210
    8 	hjuio 	hiuhiuh 	iuhi 	0 	862
    due a due hanno la stessa mail

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Vedi se così va.

    codice:
    select tab2.* from
    (select concat(id,max(punteggio)) as maggiore from tabella
    group by mail) as tab1
    left join tabella as tab2 on tab1.maggiore = concat(tab2.id,tab2.punteggio)

  9. #9
    mi da errore perchè non ho la colonna id
    codice:
    column "id" does not exist

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Fai quest'ultimo tentativo, altrimenti posta un dump significativo.

    codice:
    set @mail := '', @num := 1;
    select * from (
    select *,
       @num := if(@mail = mail, @num + 1, 1) as riga_numero,
       @mail := mail as m
    from tabella
    order by mail asc, punteggio desc) as tab where riga_numero = 1;

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.