Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155

    group by (risultati non attesi)

    Buongiorno a tutti,
    ho un problema con una semplice query

    codice:
    select listino_prezzi.*, gen_magazzino.nome 
    from listino_prezzi,gen_magazzino 
    where listino_prezzi.id_listino = 5 and listino_prezzi.id_magazzino = gen_magazzino.id_magazzino and 
    listino_prezzi.da_data <= NOW() 
    group by listino_prezzi.id_magazzino order by listino_prezzi.da_data desc
    questa query dovrebbe restituirmi l'ultimo listino prezzi in vigore raggruppato per magazzino così avviene ma non vengono restituiti l'ultimo prezzo

    ecco i dati senza il raggruppamento

    codice:
    21	5	pv	1	73	2009-05-26	NEGOZIO A
    20	5	pv	1	83	2009-05-25	NEGOZIO A
    19	5	pv	3	83	2009-05-25	NEGOZIO B
    3	5	pv	3	93.8	2009-05-22	NEGOZIO B
    4	5	pv	1	93.8	2009-05-22	NEGOZIO A
    raggruppando mi sarei aspettato

    codice:
    21	5	pv	1	73	2009-05-26	NEGOZIO A
    19	5	pv	3	83	2009-05-25	NEGOZIO B
    invece ottengo

    codice:
    4	5	pv	1	93.8	2009-05-22	NEGOZIO A
    3	5	pv	3	93.8	2009-05-22	NEGOZIO B
    dove sbaglio?

    grazie e buona giornata

    m.

  2. #2
    c'è una funzione di aggregazione che si chiama MAX, in mysql, che fa quello che vuoi tu.
    Inizia inoltre ad utilizzare la clausula JOIN che, sebbene nel tuo caso dia lo stesso risultato, rende il codice più chiaro.
    ciao
    sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    grazie mondobimbi
    ho provato
    codice:
    SELECT listino_prezzi. * , MAX( listino_prezzi.prezzo ) , gen_magazzino.nome
    FROM listino_prezzi, gen_magazzino
    WHERE listino_prezzi.id_listino =5
    AND listino_prezzi.id_magazzino = gen_magazzino.id_magazzino
    AND listino_prezzi.da_data <= NOW( ) 
    GROUP BY listino_prezzi.id_magazzino
    ORDER BY listino_prezzi.da_data DESC 
    LIMIT 0 , 30
    ma ottengo i medesimi due record

    codice:
    4	5	pv	1	93.8	2009-05-22	93.8	NEGOZIO A
    3	5	pv	3	93.8	2009-05-22	93.8	NEGOZIO B
    sicuramente sbaglio a scrivere la query ma dove?

    grazie

  4. #4
    hai ragione, pensavo volessi il listino più alto, prova ad applicare max alla data.
    ciao
    sergio

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    codice:
    4	5	pv	1	93.8	2009-05-22	2009-05-26	NEGOZIO A
    3	5	pv	3	93.8	2009-05-22	2009-05-25	NEGOZIO B
    stessi due record

    sembra che non tenga conto del ordinamento in base alla data

    altre idee?

    thanks

  6. #6
    perchè hai ordinato il result set.
    Porva questa query
    codice:
    select L.*, G.nome
    from 
    	(select * from listino_prezzi order by da_data) as L
    join gen_magazzino as G
    on L.id_magazzino = G.id_magazzino
    where L.id_listino = 5
    group by L.id_magazzino
    eventualmente applica il MAX
    ciao
    sergio

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2000
    Messaggi
    155
    codice:
    SELECT L. * , G.nome
    FROM (
    SELECT * 
    FROM listino_prezzi
    ORDER BY da_data DESC
    ) AS L
    JOIN gen_magazzino AS G ON L.id_magazzino = G.id_magazzino
    WHERE L.id_listino =5
    GROUP BY L.id_magazzino
    LIMIT 0 , 30
    grande Sergio,
    ho aggiunto
    ORDER BY da_data DESC

    e ora mi restituisce correttamente

    codice:
    21	5	pv	1	73	2009-05-26	NEGOZIO A
    19	5	pv	3	83	2009-05-25	NEGOZIO B
    grazie ancora

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.