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

    query complicata (per me)

    Bonjour mon cher!!!
    Ho una tabella fatta in questo modo:
    codice:
    mydata      categoria       nome
    ------------------------------------
    01/01/05    giallo          limone
    01/04/04    giallo          pompelmo
    03/05/06    rosso           mela
    05/05/08    rosso           arancia
    07/07/08    verde           pera
    28/03/07    verde           melone
    (carino l'esempio con la frutta, sono proprio fantasiosa...! )

    Vorrei con una query ottenere il più recente per ogni categoria (quindi secondo mydata), dunque in questo caso:
    codice:
    mydata      categoria       nome
    ------------------------------------
    01/01/05    giallo          limone
    05/05/08    rosso           arancia
    07/07/08    verde           pera
    Ho provato ad usare una query/subquery costruita in questo modo:
    codice:
    SELECT mysubquery.categoria, First(mysubquery.mydata) AS primaData, First(mysubquery.nome) AS primoNome
    FROM (SELECT * FROM mytabella ORDER BY categoria, mydata DESC) AS mysubquery
    GROUP BY mysubquery.categoria;
    Niente da fare, non mi pesca i record giusti, la subquery non mi prende i più recenti per data, ma solo quelli con l'ID più alto.
    Dove sbaglio??

    :master:
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  2. #2
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    interessante!

    il campo mydata è in formata data giusto?!

    adesso non posso provare ma hai provato a fare una semplice query

    select * from tabella group by categoria order by mydata DESC
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  3. #3
    Eh eh eh, una risposta semplice ad una domanda complicata è SPESSO una soluzione efficace....
    Purtroppo non è questo il caso, anche perchè come dici tu per la data non è specificata alcuna funzione di aggregazione e poi non è possibile utilizzare il * con le funzioni di aggregazione!
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  4. #4
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    Originariamente inviato da Picciola
    Eh eh eh, una risposta semplice ad una domanda complicata è SPESSO una soluzione efficace....
    Purtroppo non è questo il caso, anche perchè come dici tu per la data non è specificata alcuna funzione di aggregazione e poi non è possibile utilizzare il * con le funzioni di aggregazione!
    beh, ok ti ho messo * ma tu puoi scrivere i nomi dei campi!
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  5. #5
    (che pigrone... )
    Comunque non può andare lo stesso, come ti dicevo la data non è inclusa in una funzione di aggregazione, e proprio lì è il nodo della questione. Dovrei mettere First(mydate) o Last(mydate), in ogni caso non ottengo quello che voglio.
    Non è questo il metodo, serve qualcosa di un po' più CONTORTO........ VVoVe:
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

  6. #6
    Senza conoscere com'è fatta di preciso la tabella (le chiavi in particolar modo) la soluzione che mi viene in mente è questa:
    codice:
    SELECT 
        mydata,
        categoria,
        nome
    FROM 
        frutta as f
    WHERE 
        EXISTS
        (
            SELECT 
                MAX(mydata), 
                categoria 
            FROM 
                frutta as f1 
            GROUP BY 
                categoria 
            HAVING
                MAX(f1.mydata) = f.mydata 
                AND
                f1.categoria=f.categoria
        )
    xxx

  7. #7
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    Originariamente inviato da Alethesnake
    Senza conoscere com'è fatta di preciso la tabella (le chiavi in particolar modo) la soluzione che mi viene in mente è questa:
    codice:
    SELECT 
        mydata,
        categoria,
        nome
    FROM 
        frutta as f
    WHERE 
        EXISTS
        (
            SELECT 
                MAX(mydata), 
                categoria 
            FROM 
                frutta as f1 
            GROUP BY 
                categoria 
            HAVING
                MAX(f1.mydata) = f.mydata 
                AND
                f1.categoria=f.categoria
        )
    complimenti... va benone...
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  8. #8
    Grazie mille Alethesnake, con qualche piccolo aggiustamento funziona alla perfezione!!!
    (clap clap clap clap clap clap!!!)
    Spero che servirà anche a qualcun'altro...
    Sto ancora imparando.... Chiedo comprensione!
    !...Send ME a message...!

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