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

    MYSQL: problema select MIN E DISTINCT

    Ciao a tutti,
    è da giorni che ci lavoro su ma non riesco a trovare una soluzione.

    Dovrei fare una select che prenda un unico IDVISITA però quello con valore1 minore.

    Se faccio un DISTINCT normale prende il primo IDVISITA che trova in elenco invece vorrei prendere quello con valore1 inferiore.

    ESEMPIO CON I SEGUENTI RECORD:

    id: 1
    idvisita: 1
    valore1: 10

    id: 2
    idvisita: 1
    valore: 2

    io vorrei che prendesse id 2 invece prende sempre id 1.

    Ora ho questa query:
    codice:
    strqelencovisite = "select DISTINCT idvisita from tour ORDER BY touroreeminlingua1"
    Non riesco ad inserire in questa query il comando MIN.

    Fatemi sapere.
    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    non testata (e non so manco se possa essere giusta)
    codice:
    select MIN(valore), idvisita, id from tour GROUP BY idvisita HAVING MIN(valore) = valore ORDER BY touroreeminlingua1"

  3. #3
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    basta limit 1 dopo order by

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    se vuole prendere solo un record, si
    ma mi pare di capire che voglia il minore per idvisita, quindi un elenco di idvisita con il valore minore

  5. #5
    si, esattamente voglio il minore di ogni idvisita.

    Ho provato così:
    codice:
    strqelencovisite = "select MIN(touroreeminlingua1), idvisita, id from tour GROUP BY idvisita HAVING MIN(touroreeminlingua1) = touroreeminlingua1 ORDER BY touroreeminlingua1"
    e mi da questo errore:

    Microsoft OLE DB Provider for ODBC Drivers error '80040e21'
    ODBC driver does not support the requested properties.

  6. #6
    l'errore pare qua:
    HAVING MIN(touroreeminlingua1) = touroreeminlingua1

    ma secondo vari manuali dovrebbe essere giusto!

  7. #7
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Quote Originariamente inviata da pegaso22 Visualizza il messaggio
    si, esattamente voglio il minore di ogni idvisita.
    E' una domanda diversa rispetto alla prima,
    la quale avrebbe risposta così
    codice:
    select * from idvisita order by valore limit 1

  8. #8
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Per la seconda domanda ci sono vari approcci.
    Te ne metto due, va scelto in funzione dell'explain
    Normalmente uso la prima, ma dipende dai casi (ovvero se hai una materializzazione delle subquery dipendenti o no)
    codice:
    select id, visita, valore from idvisita where valore = (select min(valore) from idvisita as sub where sub.visita=idvisita.visita)
    Con join hai una derivate e ti puoi beccare temporary e filesort

    codice:
     select esterna.* from (select visita, min(valore) as minimo from idvisita group by visita) as sub join idvisita as esterna on esterna.visita = sub.visita and esterna.valore = sub.minimo
    Comunque spero che la logica sia abbastanza evidente (e di aver capito la domanda )

  9. #9
    Mi sto un po perdendo e mi va in errore.

    Io ho:
    nometabella: tour
    campo sul quale cercare il valore minimo: touroreeminlingua1
    ordinare per: touroreeminlingua1
    ci dev'essere un distinct su: idvisita

  10. #10

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 © 2025 vBulletin Solutions, Inc. All rights reserved.