sql server - Subtracting values based on date SQL -
i have data looks many more index names , index values
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
how write sql query in order subtract indx_val indx_val of previous date dates. find daily returns essentially. example abqi
1571.93
- 1568.55
return date 2012-08-13
, forth. result have dt
column, indx_nm
column, , dly_rtn
column. thank you!
try following:
;with cte ( select dt, indx_nm, indx_val, rn = row_number() on (partition indx_nm order dt desc) tablename ) select c1.dt, c1.indx_nm, c1.indx_val - c2.indx_val dly_rtn cte c1 left join cte c2 on c2.rn = c1.rn + 1 , c2.indx_nm = c1.indx_nm order c1.indx_nm, c1.dt desc
also, if query supposed run quite frequently, recommend having index:
create unique index ix_tablename_1 on tablename (indx_nm, dt desc) include (indx_val)
Comments
Post a Comment