Soustraction des valeurs en fonction de la date SQL

J'ai des données qui ressemblent à ceci mais avec beaucoup plus de noms d'index et de valeurs d'index

dt indx_nm indx_val 2013-08-13 00:00:00.000 ABQI 1571.93 2013-08-12 00:00:00.000 ABQI 1568.55 2013-08-09 00:00:00.000 ABQI 1566.1 2013-08-08 00:00:00.000 ABQI 1573.98 2013-08-07 00:00:00.000 ABQI 1567.42 2013-08-06 00:00:00.000 ABQI 1579.49 2013-08-13 00:00:00.000 ACNACTR 280.3931 2013-08-12 00:00:00.000 ACNACTR 275.1943 2013-08-09 00:00:00.000 ACNACTR 268.8868 2013-08-08 00:00:00.000 ACNACTR 265.7915 2013-08-07 00:00:00.000 ACNACTR 264.8321 2013-08-13 00:00:00.000 ACNITTR 145.3845 2013-08-12 00:00:00.000 ACNITTR 144.1252 2013-08-09 00:00:00.000 ACNITTR 143.2331 2013-08-08 00:00:00.000 ACNITTR 141.4968 2013-08-07 00:00:00.000 ACNITTR 140.6079 

Comment pourrais-je écrire une requête SQL afin de soustraire le indx_val par le indx_val de la date précédente pour toutes les dates. Je voudrais find des returns quotidiens essentiellement. Par exemple, pour ABQI il y aurait 1571.931568.55 comme déclaration pour la date du 2012-08-13 et ainsi de suite. Je voudrais que le résultat ait une colonne dt , indx_nm colonne dly_rtn et dly_rtn colonne dly_rtn . Je vous remercie!

Essayez de suivre:

 ;with cte as ( select dt, indx_nm, indx_val, rn = row_number() over (partition by indx_nm order by dt desc) from TableName ) select c1.dt, c1.indx_nm, c1.indx_val - c2.indx_val as dly_rtn from cte c1 left join cte c2 on c2.rn = c1.rn + 1 and c2.indx_nm = c1.indx_nm order by c1.indx_nm, c1.dt desc 

Aussi, si la requête est supposée être exécutée assez fréquemment, je reorderais d'avoir index:

 create unique index IX_TableName_1 on TableName (indx_nm, dt desc) include (indx_val) 
 select a.dt,a.indx_nm ,(b.indx_val-a.indx_val)dly_rtn From table1 a join Table1 b on a.dt=dateadd(dd,1,b.dt) and a.indx_nm=b.indx_nm