我的数据看起来像这样,但有更多的索引名称和索引值
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
我如何编写一个 SQL 查询,以便用所有日期的前一个日期的 indx_val 减去 indx_val。我想基本上找到每日返回。例如对于 ABQI
它将是 1571.93
- 1568.55
作为返回日期 2012-08-13
和等等。我希望结果具有 dt
列、indx_nm
列和 dly_rtn
列。谢谢!
最佳答案
尝试以下操作:
;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
此外,如果查询应该非常频繁地运行,我建议使用索引:
create unique index IX_TableName_1
on TableName (indx_nm, dt desc) include (indx_val)
关于sql - 根据日期减值 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18261148/