Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    group by con ritorno del valore più recente

    salve.

    ho una tabella con varie informazioni. faccio prima a fare un esempio :

    matricola_corso \ nome \ data_iscrizione
    1100 marco 2009
    1100 luca 2008
    2200 antonio 2007
    2200 federico 2008
    2200 antonio 2004

    dovrei ritornare "tramite group by" il count(*) della matricola_corso e il nome studente con data_iscrzione più alta.

    nel caso sopra :

    2 marco
    3 federico

    l'order by viene applicato dopo il group by e quindi non funziona. forse con una query annidata (cioè prima prendo la lista ordinata per data, poi applico il group by)?

    cordiali saluti

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Se la data di iscrizione è identificata solo dall'anno come si deve comportare la query nel caso ci siano più matricole iscritte nello stesso anno? Quale nome visualizzeresti?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    no bhè ovviamente il campo è datetime (compreso di ora-minuti-secondi). era giusto a scopo illustrativo

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da markzzz
    no bhè ovviamente il campo è datetime (compreso di ora-minuti-secondi). era giusto a scopo illustrativo
    Prova così

    codice:
    select tab2.nome,count(tab1.matricola_corso) as quanti from tabella as tab1
    join (select * from tabella order by data_iscrizione desc) as tab2
    on tab1.matricola_corso = tab2.matricola_corso and tab1.data_iscrizione = tab2.data_iscrizione 
    group by tab1.matricola_corso

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    grazie per l'aiuto. effettivamente ho risolto, però vorrei fare una riflessione, per vedere se ho capito.
    alla fine la mia query finale è questa (ho unito anche un altra tabella)
    codice:
    SELECT tab2.date, tab2.trackid, tab2.uservote, tab2.vote, tab3.artist, tab3.event, tab3.date, tab3.res, COUNT(tab2.trackid) 
    FROM vote AS tab1 JOIN (SELECT * FROM vote ORDER BY date DESC) AS tab2 ON tab1.idvote = tab2.idvote JOIN tracklist AS tab3 ON tab1.trackid=tab3.trackid
    GROUP BY tab1.trackid ORDER BY tab2.date DESC
    cioè, faccio il join tra tab1 e tab2 via idvote, che è unico (chiave primaria) su entrambe (in modo da non avere ulteriori dublicati).

    in questo modo funziona perchè quando fà il join parte dalla seconda select a confrontare. nel senso : fà il join partendo dalla prima riga della seconda tabella (quella ordinata) e procede in maniera "decrescente" riga per riga giusto?

    questo non mi torna, perchè essendo tab1 join tab2 dovebbe partire dalla prima tabella (cioè quella non ordinata...)

    saluti

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.