Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Query distinct in mysql

    Ciao a tutti e grazie in anticipo a chi mi vorrà aiutare:
    ho una tabella mysql con tre colonne.
    La prima colonna può prendere valori da 1 a 3, la seconda da 1 a 12 e la terza gli anni (2008, 2009, 2010....)
    Quello che mi interesserebbe è che per ognuno dei valori della prima colonna potessi tirare fuori la massima coppia di colonna2 e colonna3.
    Per intenderci per colonna1=1 se il valore massimo di colonna 3 è 2009 deve trovare il valore massimo di colonna2 corrispondernte anche se non è il valore massimo in assoluto.
    # col1 col2 col3
    1 1 12 2008
    2 1 11 2008
    3 1 11 2009
    4 2 11 2009
    5 2 12 2009

    deve restituire il record 3 e il record 5 e basta.

    Qualche idea??
    Grazie ancora per l'aiuto!

  2. #2
    ciao, nulla cio' che avevo scritto non va bene... ci ripenso su e se mi viene in mente riscrivo..
    =======================
    http://www.abidibo.net

  3. #3
    una soluzione banale potrebbe essere:

    codice:
    SELECT *, concat(col3, col2, col1) as val
    from tabella
    order by val desc
    limit 2
    se col1 arriva a tre mettici limit 3

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Piero, ti ringrazio ma non è questo che volevo ottenere...
    in col1 ho il nome di tre diverse persone. in Col2 il mese di cui hanno fatto la pianificazione e in colonna 3 l'anno. Quindi guardando l'esempio ho che in riga 1 la persona 1 ha fatto la pianificazione per il mese 12 2008, poi in riga 2 che la persona 1 ha fatto la pianificazione per il mese 11 2008 e in riga 3 che ha fatto la pianificazione per il mese 11 2009. Quindi l'ultimo mese che ha aggiornato è il 11 2009 e la query per la persona 1 mi deve restituire solo la riga 3

    Per la persona 2 invece ho le righe 4 e 5 che mi dicono che ha fatto la pianificazione per 11 2009 e 12 2009. Per la persona 2 mi deve restituire la riga 5.
    Il risultato della query dovrebbe essere:

    # col1 col2 col3
    3 1 11 2009
    5 2 12 2009

    Grazie ancora a tutti per l'aiuto
    Lelio

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    SELECT col1, MAX(CONCAT(col3,col2)) from tabella
    group by col1

  6. #6
    Originariamente inviato da luca200
    SELECT col1, MAX(CONCAT(col3,col2)) from tabella
    group by col1
    si, l'avevo visto, ma siccome chiede espressamente l'id 3 e 5 forse per altri contenuti del record (contenuti non dichiarati), il group by rende il primo id che trova corrispondere con col1 e non il record 3 e 5.

    Se gli basta utente e data va bene. E' la struttura della tabella che non va bene per quello che deve fare. Basterebbe inserire la data completa in un campo date per avere:

    codice:
    select *
    from (select max(data) as val
           from tabella 
           group by col1) as tab1
    inner join tabella as tab2 
           ON tab1.val = tab2.data
    e' per questo che ho scritto "soluzione banale" omettendo "ad un problema strutturale"


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Lui ha chiesto i record 3 e 5 perché sono quelli che contengono i valori che gli interessano.
    Se poi vuole in output anche gli id, o altri eventuali dati, allora deve fare la subquery come nel tuo ultimo codice. Ma non c'è bisogno del campo data, basta concatenare anno e mese

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.