当前位置: 首页 > 面试题库 >

比较当前行与SQL Server中的上一行

茹轩昂
2023-03-14
问题内容

我有一个名为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

OutcomeId16出现时,则以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 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

演示在这里



 类似资料:
  • 问题内容: 我有以下Pandas DataFrame,我想创建另一列来比较col1的前一行,以查看它们是否相等。最好的方法是什么?就像下面的DataFrame。谢谢 问题答案: 您需要使用: 或改为使用,但是在大型DataFrame中,它会稍微慢一些: 时间 :

  • 问题内容: 这个问题已经在这里有了答案 : SQL中的TRUNCATE和DELETE有什么区别 (32个答案) TRUNCATE vs DELETE FROM的利弊 (11个答案) 6年前关闭。 关于mysql / sqlserver,我的脑海里发生了一件事,即 删除/截断 哪个更好更快? 在哪里使用删除? 在哪里使用截断? 问题答案: 删除 DELETE是DML命令。 使用行锁执行DELETE语

  • 假设一个组件有一个prop'name'和状态'elapse'。 当道具更改时,应重置为0。 到 嗨,鲍勃。已经0秒了 > 不能使用,因为不是的纯函数,而且我不能返回0,因为重新呈现时可能会调用它。 如何替换有状态组件中的?

  • 问题内容: 如何将SQL Server日期列与当前星期进行比较? 例如: 问题答案: 您可以将日期转换为星期数,然后将其与当前日期的星期数进行比较。同样,您还需要比较年份,以免获得去年的星期数。

  • 我有个约会‘2019-05-08t 22:15:00-0400’。我想将这个日期与当前的日期和时间进行比较。如果上述日期和时间小于当前日期和时间,那么我必须做些什么。 我的代码是:- 但它返回 false 。

  • 有了这个,我会检查服务最后一次运行的时间,以及是否有必要再次运行。 我正在将当前日期转换为整数。但后来我得到一个错误:错误: 08-27 17:21:40.930:W/System.err(26577):java.lang.NumberFormatException:无效int:“201308271721” 08-27 17:21:40.930:W/System.err(26577):java.l