在SQL Server中比较当前行与上一行/下一行

3

我有一个名为team的表格,它长这样:我只是在第三列添加了一个row_number。

RaidNo  OutComeID   RN
2           15      1
4           15      2
6           14      3
8           16      4
10          16      5
12          14      6
14          16      7
16          15      8
18          15      9
20          16      10
22          12      11
24          16      12
26          16      13
28          16      14
30          15      15
32          14      16
34          13      17

OutcomeId为16时,从1开始,连续加上16,每次加一。结果如下:
RaidNo  OutComeID   RN  Result
2           15      1   0
4           15      2   0
6           14      3   0
8           16      4   1
10          16      5   2
12          14      6   0
14          16      7   1
16          15      8   0
18          15      9   0
20          16      10  1
22          12      11  0
24          16      12  1
26          16      13  2
28          16      14  3
30          15      15  0
32          14      16  0
34          13      17  0

帮我获取结果。


我们应该使用SELECT语句还是在表列中完成这个操作? - Whencesoever
不管它是什么,都没有问题。 - DineshDB
1
我认为LAG函数是您在此处寻找的 https://learn.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql - Jacob H
1个回答

4
您可以使用以下查询:
SELECT RaidNo, OutComeID, RN,
       CASE 
          WHEN OutComeID <> 16 THEN 0
          ELSE ROW_NUMBER() OVER (PARTITION BY OutComeID, grp ORDER BY RN) 
       END AS Result
FROM (
   SELECT RaidNo, OutComeID, RN,
          RN - ROW_NUMBER() OVER (PARTITION BY OutComeID ORDER BY RN) AS grp
   FROM mytable) AS t
ORDER BY RN

字段grp用于标识具有相同OutComeID值的连续记录片段(也称为岛屿)。外部查询使用grp来枚举属于'16'片段的每个记录。属于其他片段的记录被赋予值0

此处演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接