在SQL Server 2008中选择“以前的记录”

时间:2014-03-25 02:05:21

标签: sql sql-server-2008

在这种情况下:我有一个表myTable,其中包含3列:

  • ID int, identity
  • Group varchar(2), not null
  • value decimal(18,0), not null

表格如下:

ID  GROUP   VALUE   Prev_Value  Result
------------------------------------------
1   A       20      0           20
2   A       30      20          10
3   A       35      30          5
4   B       100     0           100
5   B       150     100         50
6   B       300     200         100
7   C       40      0           40
8   C       60      40          20
9   A       50      35          15
10  A       70      50          20

Prev_ValueResult列应为自定义列。我需要在视野上进行。有人可以帮忙吗?拜托......非常感谢你。

1 个答案:

答案 0 :(得分:2)

这里需要做的就是将表连接到自身,其中部分连接条件是表的连接副本的值列小于原始值的列。然后,您可以按原始表中的列进行分组,并从连接表中选择最大值以获得结果:

SELECT t1.id, t1.[Group], t1.Value
     , coalesce(MAX(t2.Value),0) As Prev_Value
     , t1.Value - coalesce(MAX(t2.Value),0) As Result
FROM MyTable t1
LEFT JOIN MyTable t2 ON t2.[Group] = t1.[Group] and t2.Value < t1.Value
GROUP BY t1.id, t1.[Group], t1.Value

一旦您可以更新到Sql Server 2012,您还可以利用new LAG keyword

相关问题