Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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 如何比较同一表中的多行并使用不同的值标记它们?_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

Sql 如何比较同一表中的多行并使用不同的值标记它们?

Sql 如何比较同一表中的多行并使用不同的值标记它们?,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,所以我的问题似乎很容易解决,但很快就会变得复杂。我希望能够比较每个任务ID的序列号,并根据它们是否连续而对它们进行不同的标记。我有一张这样的桌子: 任务id 序号 阶段 4444444 7. 检查 4444444 8. 检查 4444444 9 检查 4444444 10 检查 4444444 53 检查 4444444 54 检查 4444444 55 检查 4444444 91 检查 4444444 92 检查 您可以从seq_num中减去顺序值。当值递增1时,该值为常量 然后,使用dens

所以我的问题似乎很容易解决,但很快就会变得复杂。我希望能够比较每个任务ID的序列号,并根据它们是否连续而对它们进行不同的标记。我有一张这样的桌子:

任务id 序号 阶段 4444444 7. 检查 4444444 8. 检查 4444444 9 检查 4444444 10 检查 4444444 53 检查 4444444 54 检查 4444444 55 检查 4444444 91 检查 4444444 92 检查
您可以从
seq_num
中减去顺序值。当值递增1时,该值为常量

然后,使用
densite\u rank()
分配分组:

select t.*,
       dense_rank() over (partition by task_id order by seq_num - x) as grouping
from (select t.*,
             row_number() over (partition by task_id order by seq_num) as x
      from t
     ) t;
另一种方法是使用
lag()
和累积总和:

select t.*,
       sum(case when prev_seqnum = seqnum - 1 then 0 else 1 end) over (partition by task_id order by seq_num) as grouping
from (select t.*,
             lag(seq_num) over (partition by task_id order by seq_num) as prev_seqnum
      from t
     ) t

请分享你的想法非常感谢你,戈登!稠密的队伍完美地满足了我的需要。我一定会在将来使用它!