Query con funzioni di aggregazione

di il
10 risposte

Query con funzioni di aggregazione

Salve a tutti.
Ho una vista con i seguenti campi (per semplicità riporto solo quelli di interesse per la mia query):
IdOpi, IdOLT, IdRigaOLT, Fornitore, DataConsegna

Per ogni OPI (Ordine di Produzione) posso avere più righe di OLT (Ordini Terzista). L'OLT è caratterizzato dal Fornitore e la riga dell'OLT è caratterizzata dalla DataConsegna.

Es:
1, 1, 1, FORN1, 01/02/2013
1, 1, 2, FORN1, 05/02/2013
1, 2, 1, FORN2, 07/02/2013

Ora dovrei fare una query che per ogni OPI mi mostra la MAX(DataConsegna) e il Fornitore dell'OLT con MAX(DataConsegna)
Nel caso dell'esempio vorrei avere
1, FORN2, 07/02/2013

Per la data credo non ci siano problemi:
SELECT MAX(DataConsegna)
FROM VISTA
GROUP BY IdOpi
Solo che poi non so come recuperare il Fornitore....

Spero di essermi spiegata a sufficienza.

Grazie

10 Risposte

  • Re: Query con funzioni di aggregazione

    Ciao,

    Qual'è il problema? se vuoi recuperare anche il fornitore mettilo nella SELECT. Ovviamente la query e' con group by quindi i parametri presenti nella clausola SELECT devono essere o parametri che compariranno come argomento della group by o funzioni di aggregazione.

    Quindi puoi recuperare il primo fornitore tanto non ti interessa FIRST(Fornitore)
  • Re: Query con funzioni di aggregazione

    Se dovesse funzionare, nello spirito del forum ricordati di postare la soluzione in modo tale da metterla a disposizione di altri che avessero una necessita analogA....
  • Re: Query con funzioni di aggregazione

    Bomberdini ha scritto:


    Ciao,

    Qual'è il problema? se vuoi recuperare anche il fornitore mettilo nella SELECT. Ovviamente la query e' con group by quindi i parametri presenti nella clausola SELECT devono essere o parametri che compariranno come argomento della group by o funzioni di aggregazione.
    Proprio per questo non so come mettere il fornitore: non deve comparire nella Group by e non saprei che funzione di aggregazione usare...

    Forse mi sfugge qualcosa...
  • Re: Query con funzioni di aggregazione

    La funzione di aggregazione e' la FIRST :
    
    SELECT MAX(DataConsegna), FIRST(Fornitore)
    FROM VISTA
    GROUP BY IdOpi
    
    Fammi sapere se va
  • Re: Query con funzioni di aggregazione

    Mi viene restituito il seguente messaggio di errore:
    'FIRST' non è un valore riconosciuto di nome di funzione predefinita.

    Uso SQL Server 2005
  • Re: Query con funzioni di aggregazione

    Mmm dovresti cercare l'equivalente di first su sql server 2005...

    Non vorrei dire una gran cavolata ma prova con TOP (1)
  • Re: Query con funzioni di aggregazione

    No, non funziona. Grazie cmq per i suggerimenti.
  • Re: Query con funzioni di aggregazione

    Di niente... comunque cercando in rete dovresti trovare l'equivalente della funzione di aggregazione first in sql server....

    L'idea e' raggruppi per un certo valore e poiche vuoi il nome del fornitore prendi solo il primo o solo l'ultimo come preferisci tanto e' sempre lui...

    E' un modo per prendere un parametro di quel tipo con una group by
  • Re: Query con funzioni di aggregazione

    Alla fine ho risolto utilizzando una tabella temporanea.

    Metto in tale tabella tutti gli Opi che mi servono. Poi aggiorno la Data con
    SELECT MAX(DataConsegna)
    FROM VISTA
    GROUP BY IdOpi
    Poi aggiorno il fornitore usando
    SELECT FIRST(Fornitore)
    FROM VISTA
    WHERE IdOpi = tabTemp.IdOpi AND DataConsegna=tabTemp.DataConsegna
    GROUP BY IdOpi
  • Re: Query con funzioni di aggregazione

    Ciao,

    mi fa piacere che hai risolto... alla fine la query e' uscita come dicevamo all'inizio. Apparte che usi la tab temporanea che forse non servirebbe.

    Quindi anche in sql server c'e' la funzione first... buono a sapersi
Devi accedere o registrarti per scrivere nel forum
10 risposte