Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [Mysql] Group By Desc

  1. #1
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725

    [Mysql] Group By Desc

    Avrei un problema, magari perdo io colpi ma mi sto perdendo.

    Diciamo che ho una tabella con id, id_servizio, tipo, descrizione, data.

    Bene, nella mia tabella se faccio una select nella quale dico order by id_servizio desc, id desc ottengo i dati ordinati per id_servizio in maniera decrescente. Se io però per ogni id_servizio volessi ottenere l'ultima riga sul db?

    [Esempio]
    ID | ID Servizio | Tipo | Desc
    1 | 1000 | 5 | AV
    2 | 2000 | 1 | ASD
    3 | 1000 | 4 | CS
    4 | 1000 | 5 | RA

    In questo caso vorrei ottenere la linea id = 4 per il servizio 1000.

    Tuttavia se io raggruppo per id_servizio mi da sempre solamente la prima linea in maniera crescente.

    Riassumendo: Come si raggruppa per un certo campo in maniera da ottenere l'ultimo valore inserito
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  2. #2
    non ho ben capito, fa' un esempio

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    in due modi: sporco e pulito.
    pulito: se esiste una chiave monotona crescente con un bel ... MAX
    sporco: order by con limit 1

  4. #4
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Ciao, intanto grazie per le risposte.

    @Franzauker: non ho ben capito il metodo pulito, se intendi che il Servizio sia crescente e/o univoco purtroppo la risposta è no. Per il metodo 'sporco' bisogna raccogliere in un array il valore dell'id dell'ultimo record per ogni servizio? Ciò penso rallenti un bel po il sistema

    @Optime: provo a spiegarmi un po meglio:
    Ho una tabella nella quale gestisco una serie di Servizi, ogni servizio può avere più linee su questa tabella perchè magari cambia descrizione nel tempo o altro.

    La tabella sarà quindi cosi formata:
    codice:
    [id] [serv] [descr]
    
    001 | 1000 | prova01
    002 | 1000 | prova02
    003 | 2000 | prova03
    004 | 1000 | prova04
    005 | 2000 | prova05
    Quel che mi interessa è ottenere gli ultimi dati per ogni servizio, ciò significa che mi interessa sapere che per il Servizio 1000 gli ultimi dati sono (id = 004, descrizione = prova04), mentre per il Servizio 2000 gli ultimi dati sono (id = 005, descrizione = prova05).

    Purtroppo la tabella contiene circa 80/90.000 record e per non mostrarli tutti volevo visualizzare solamente l'ultimo stato che ha il Servizio in questo momento, quindi stampare solo gli ultimi valori.

    Grazie mille
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Aires
    Ciao, intanto grazie per le risposte.

    @Franzauker: non ho ben capito il metodo pulito, se intendi che il Servizio sia crescente e/o univoco purtroppo la risposta è no. Per il metodo 'sporco' bisogna raccogliere in un array il valore dell'id dell'ultimo record per ogni servizio? Ciò penso rallenti un bel po il sistema
    codice:
    select * from prova p1 where
    p1.id=(select p2.id from prova p2 where p2.serv=p1.serv order by p2.id desc limit 1)
    "sporco" (ma attenzione, se id è chiave primaria e non c'è indice su serv questo è il modo "giusto" per far usare l'indice su id)
    alternativa (che per mysql, se non ci sono indici usabili, non è efficiente come la prima, perchè nella subquery dipendente NON potrà fare una selezione del massimo "furba")
    codice:
    select * from prova p1 where
    p1.id=(select max(p2.id) from prova p2 where p2.serv=p1.serv)
    non un granchè come soluzione, ma dovrebbe fare al caso tuo.


    L'ipotesi è che gli ID siano monotoni crescenti, ovvero che le righe siano inserite in quell'ordine

  6. #6
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Grazie per la risposta, anche se ho paura che forse rallenti troppo il sistema
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da Aires
    Grazie per la risposta, anche se ho paura che forse rallenti troppo il sistema
    e perchè mai? dipende dalla cardinalità (selettività) di serv e dalla disponibilità di indici su serv

    PS la prima regola dei database dice: "prima misura, poi decidi"

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.