如果两个列中的上一个条目与下一个条目不同,则进行标记

时间:2018-08-24 09:14:28

标签: sql sql-server

我要标记第1列中的连续条目相同但第5列中的连续条目不同的实例。我想使用“ 1”和“ 0”在新列中对此进行标记。

示例:

An example

1 个答案:

答案 0 :(得分:0)

SQL表表示无序集。除非有列指定顺序,否则没有下一行或上一行。

有两种方法可以解释您的问题:

  1. 您想要的示例中col1的值比col5多。
  2. 您有一列指定顺序。

在两种情况下,您都可以使用窗口功能。对于第一个:

select t.*
from (select t.*,
             min(col5) over (partition by col1) as min_col5,
             max(col5) over (partition by col1) as max_col5
      from t
     ) t
where min_col5 <> max_col5;

请注意,这将返回所有带有col1值的行。

第二次,您将使用lead() / lag()

select t.*
from (select t.*,
             lag(col5) over (partition by col1 order by ?) as prev_col5,
             lead(col5) over (partition by col1 order by ?) as next_col5
      from t
     ) t
where col5 <> prev_col5 or col5 <> next_col5;

?用于订购列。

请注意,这将返回突出显示的两行。