Aiuto per implementare N max valori (equivalente LARGE Excel)

di il
4 risposte

Aiuto per implementare N max valori (equivalente LARGE Excel)

Ciao, sono nuovo.
Ho bisogno del vostro cortese aiuto per migliorare un codice SQL che gira su un server MS-SQL.
Ho una tabella chiamata TEMP10 con quatto campi in cui per ciascun giorno ci sono valori per due UNIT (1 e 2).Ciascuna UNIT ha 6 SUBUNIT a ci corrisponde un valore:

DAY UNIT SUBUNIT VALUE
22/10/2018 unit1 1 40
22/10/2018 unit1 6 38
22/10/2018 unit2 3 37
22/10/2018 unit2 6 36
22/10/2018 unit2 5 35
22/10/2018 unit2 1 34
22/10/2018 unit1 3 31
22/10/2018 unit2 2 29
22/10/2018 unit2 3 26
22/10/2018 unit1 5 25
22/10/2018 unit1 4 24
22/10/2018 unit1 2 22


Con una query mi piacerebbe che per ciascun giorno, per ciascuna UNIT mi restituisse i primi 3 piu’ alti valori di VALUE, non importa di quale SUBUNIT.

Al momento lo sto facendo a mano con Excel e da inesperto ho provato invano di implementarlo direttamente in SQL. Ho provato il semplice:
SELECT TOP 3 * FROM TEMP10 ORDER BY VALUE DESC


Che mi restituisce:

DAY UNIT SUBUNIT VALUE
22/10/2018 unit1 1 40
22/10/2018 unit1 6 38
22/10/2018 unit2 3 37

Invece desidererei che mi restituisse i primi piu’ alti valori per ciacuna UNIT, quindi in questo caso un output con 6 righe e non 3. Cioe’ cosi’:

DAY UNIT SUBUNIT VALUE
22/10/2018 unit1 1 40
22/10/2018 unit1 6 38
22/10/2018 unit1 3 31
22/10/2018 unit2 3 37
22/10/2018 unit2 6 36
22/10/2018 unit2 5 35


Ho fatto un po' di ricerche in retee innumerevoli prove ma proprio non ci riesco.

Grazie a chi puo' darmi una mano.

Ciro

4 Risposte

  • Re: Aiuto per implementare N max valori (equivalente LARGE Excel)

    E' un po' arzigogolato, ma si puo' fare:
    devi fare 6 query, ogn'una per ogni combinazione di unit/dubunit
    quindi unire i risultati, mediante una UNION

    Non si puo' gerneralizzare:l'SQL (il LINGUAGGIO di interrogazione, NON SQL Server) non e' sufficientemente flessibile per una cosa del genere.

    Altrimenti fai una Stored Procedure.
  • Re: Aiuto per implementare N max valori (equivalente LARGE Excel)

    Grazie migliorabile, forse continuero' con Excel che si presta agevolmente a queste cose.

    Oppure non 6 query ma basterebbe farne due: una per unit1 e una per unit2 con quel codice sopra e poi le unisco con UNION
  • Re: Aiuto per implementare N max valori (equivalente LARGE Excel)

    Questa mi pare che corrisponda alla tua esigenza (se non ho capito male):
    SELECT Day,unit,subunit,value FROM (
    SELECT top 3 Day,unit,subunit,value FROM temp10 
    WHERE unit = 'unit1'
    GROUP BY Day, unit, subunit, value
    ORDER BY value desc) AS qry1
    
     UNION
    
    SELECT Day,unit,subunit,value FROM (
    SELECT top 3 Day,unit,subunit,value FROM temp10 
    WHERE unit = 'unit2'
    GROUP BY Day, unit, subunit, value
    ORDER BY value desc) AS qr2
    
  • Re: Aiuto per implementare N max valori (equivalente LARGE Excel)

    Grazie gibra, funziona
Devi accedere o registrarti per scrivere nel forum
4 risposte