Visualizzazione dei risultati da 1 a 8 su 8

Discussione: order by nel group by

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    189

    order by nel group by

    ho una tabella

    nome | tipo | datains
    qui | gatto | 2009-05-01
    quo | gatto | 2009-04-01
    qua | gatto | 2009-03-01
    pluto | cane | 2009-04-01
    pippo | cane | 2009-03-01

    se voglio ottenere
    il cane e il gatto inserito per ultimo

    quindi
    qui | gatto | 2009-05-01
    pluto | cane | 2009-04-01

    con

    select *
    from animali
    group by tipo
    order by datains

    non funziona, perchè l'order by viene applicato solo dopo il group by
    come si fa?

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Non è molto chiaro. Ti posto una query giusto per darti un'idea

    codice:
    select *, if(tipo in('cane','gatto'),2,1) as ordine
    from tabella
    order by ordine,tipo
    La query assegnerà alle tipologie cane e gatto il valore 2 e a tutte le altre il valore 1. A questo punto avrai quelle due in coda.

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da nicola75ss
    Non è molto chiaro. Ti posto una query giusto per darti un'idea

    codice:
    select *, if(tipo in('cane','gatto'),2,1) as ordine
    from tabella
    order by ordine,tipo
    La query assegnerà alle tipologie cane e gatto il valore 2 e a tutte le altre il valore 1. A questo punto avrai quelle due in coda.
    No, così usciranno tutti i cani prima di tutti i gatti

    codice:
    SELECT tipo, max(datains)  from animali
    group by tipo
    having tipo in ('cane','gatto')

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    189
    @luca200

    in effetti così l'ho provata anche io, solo che mi servono anche altri valori che ci sono nel record e facendo il max della data mi restituisce solo la data più alta ma gli altri campi relativi ad un altro record

    per capirci

    nome | tipo | datains | peso | altezza
    qui | gatto | 2009-05-01 | 3 | 9
    quo | gatto | 2009-04-01 | 3 | 10
    qua | gatto | 2009-03-01 | 3 | 11
    pluto | cane | 2009-04-01 | 3 | 5
    pippo | cane | 2009-03-01 | 3 | 6

    SELECT tipo, max(datains) , peso, altezza
    from animali
    group by tipo
    having tipo in ('cane','gatto')

    mi restituisce

    qui | gatto | 2009-05-01 | 3 | 10
    pluto | cane | 2009-04-01 | 3 | 5

    è come se prendesse tutti i dati di questo record
    quo | gatto | 2009-04-01 | 3 | 10

    ma la data di quest'altro
    qui | gatto | 2009-05-01 | 3 | 9

  5. #5
    codice:
    SELECT * from animali as t1
    where datains=(select max(datains) from animali as t2 where t1.tipo=t2.tipo)
    group by tipo
    having tipo in ('cane','gatto')
    cosi'?

    ciao
    danno

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    189
    non va...

    il problema anche volendolo fare con 2 query è prendere gli ID dei record che hanno la data più alta con un GROUP BY

  7. #7

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    189
    partendo da queslla nel tuo post

    SELECT *
    FROM
    (select concat(id,max(datas)) as datas from maggiori
    group by id) as tab1
    left join maggiori as tab2
    ON tab1.datas = concat(tab2.id,tab2.datas)

    non capisco come fa a funzionare, a me non va:

    il concat(id,max(datas) concatena l'id di un record e la data di un altro
    infatti mi genera un record con il solo DATAS valorizzato

    perche
    tab1.datas = concat(tab2.id,tab2.datas)

    non si verifica, dato che i 2 valori sono su 2 record differenti

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.