Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    SQL2008 - ottenere differenza di valori tra due record in una query

    Ciao a tutti
    ho una tabella che contiene due campi, un IDentificatore e un valore numerico.
    C'è modo di ottenere con una singola query il valore numerico ed anche la differenza tra il valore numerico corrente e quello precedente?
    Es:
    nella tabella ho
    1 | 10
    2 | 45
    3 | 57
    4 | 70
    ....
    vorrei ottenere
    10 | 0
    45 | 35
    57 | 12
    70 | 13
    ....
    grazie!
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Se i tuoi ID sono tutti consecutivi...

    select t2.valore - t1.valore from tabella t1, tabella t2
    where t1.id = t2.id - 1


    Se hai dei buchi in mezzo.... ci sto pensando

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    buchi presenti
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    18
    In caso di Id non consecutivi potresti usare questo metodo

    codice:
     select t1.valore ,  decode (t1.rn , 1 , 0 ,   t2.valore - t1.valore  )
     from
         ( SELECT ROW_NUMBER()  rn, valore from tabella ORDER BY identificatore ) t1 ,
         ( SELECT ROW_NUMBER()  rn, valore from tabella ORDER BY identificatore ) t2 
         where t1.rn = t2.rn - 1;
    il row_number() ti crea una colonna numerica ordinata dei record estratti e cosi facendo risolvi il problema dei buchi

    il decode invece ti serve per il primo recod dato che per defaul deve essere zero da quanto o capito

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2009
    Messaggi
    18
    Ops chiedo scusa ti ho risposto senza verificare

    codice:
    select t2.valore ,  t1.valore , decode (t1.valore , null , 0 ,   t2.valore - t1.valore  )
     from
         ( SELECT ROW_NUMBER()  rn, valore from test ORDER BY identificatore ) t1 RIGHT OUTER JOIN
         ( SELECT ROW_NUMBER()  rn, valore from test ORDER BY identificatore ) t2 
         ON  t1.rn  =   t2.rn - 1 
        order by t2.valore
    questa dovrebbe fare esattamente quello che ti serve!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.