我有一个名为MyHistory
的表格,我的历史记录在此表格中有大约1000行,而且表现最糟糕。
我想要做的是选择显示下一行的行作为结果。这可能是一个不好的例子。
这是MyHistory结构ID int,DateTimeColumn datetime,ValueResult decimal (4,2)
我的表格有以下数据
ID|DateTimeColumn|ValueResult
1|8/1/2005 1:01:29 PM|2
1|8/1/2006 1:01:29 PM|3
1|8/1/2007 1:01:29 PM|5
1|8/1/2008 1:01:29 PM|9
我想要做的是从中选择以下数据
ID|DateTimeColumn|ValueResult|ChangeValue
1|8/1/2008 1:01:29 PM|9|4
1|8/1/2007 1:01:29 PM|5|2
1|8/1/2006 1:01:29 PM|3|1
1|8/1/2005 1:01:29 PM|2|
你会注意到ID是= ID,而datetime列现在是desc。这很容易。但是,如何基于下一个日期时间制作自引用表(以计算值的差异)?
谢谢!
答案 0 :(得分:0)
所以,任务是:
DateTimeColumn
降序排列记录,这是许多可能的解决方案之一:
-- Use CTE to make intermediate table with sequence numbers - ranks
;WITH a (rank, ID, DateTimeColumn, ValueResult) AS
(
select rank() OVER (ORDER BY m.DateTimeColumn DESC) as rank, ID, DateTimeColumn, ValueResult
from MyHistory
)
-- Select all resulting columns
select a1.ID,
a1.DateTimeColumn,
a1.ValueResult,
a1.ValueResult - a2.ValueResult as ChangeValue -- Difference between current record and next one
from a a1
join a a2
on a2.rank = a1.rank + 1 -- linking next record to each one