Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择SQL Server 2008中的上一条记录_Sql_Sql Server 2008 - Fatal编程技术网

选择SQL Server 2008中的上一条记录

选择SQL Server 2008中的上一条记录,sql,sql-server-2008,Sql,Sql Server 2008,情况是这样的:我有一个表myTable,其中包含3列: IDint,identity 组varchar(2),非空 值十进制(18,0),非空 表如下所示: ID GROUP VALUE Prev_Value Result ------------------------------------------ 1 A 20 0 20 2 A 30 20 10 3 A 35

情况是这样的:我有一个表
myTable
,其中包含3列:

  • ID
    int,identity
  • varchar(2),非空
  • 十进制(18,0),非空
表如下所示:

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_值
Result
列应为自定义列。我需要把它放在视野里。有人能帮忙吗?请非常感谢。

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

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
选择t1.id,t1.[Group],t1.Value
,合并(最大值(t2.Value),0)作为上一个值
,t1.值-合并(最大值(t2.值),0)作为结果
来自MyTableT1
左键连接t2上的MyTable t2。[组]=t1。[组]和t2.Value

一旦您可以更新到Sql Server 2012,您还可以利用。

您能解释一下“自定义字段”吗?我想他指的是计算字段。请解释一下您用来生成上一个值和结果的规则。我看不到任何模式。prev_值将采用记录的上一个值。如果你看到第二条记录。上一个值是20。取自记录1。ff。基于“组”字段。“结果”字段“值”-“上一个值”。非常感谢。。。你就是那个人!!但是如果在sql 2012上运行它。。行吗?