显示同一表的历史结果

时间:2013-10-14 16:33:16

标签: sql-server sql-server-2008

我有一个名为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。这很容易。但是,如何基于下一个日期时间制作自引用表(以计算值的差异)?

谢谢!

1 个答案:

答案 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