Sql 如果查询连续发生,如何在查询中仅选取一个值

Sql 如果查询连续发生,如何在查询中仅选取一个值,sql,oracle,Sql,Oracle,上述值是查询输出的一部分。 要求是,在Sno 1和2连续出现时,“状态”列应仅返回一个“输入”。 此处的其他行不应受到影响。例如,“已分配”-因为它不是连续发生的。带有一些逻辑检查的滞后应该执行您想要的操作: SNO Status 1 Entering 2 Entering 3 Assigned 4 Denied 5 Assigned 逻辑检查的滞后

上述值是查询输出的一部分。 要求是,在Sno 1和2连续出现时,“状态”列应仅返回一个“输入”。 此处的其他行不应受到影响。例如,“已分配”-因为它不是连续发生的。

带有一些逻辑检查的滞后应该执行您想要的操作:

   SNO       Status
     1      Entering    
     2      Entering
     3      Assigned    
     4      Denied   
     5      Assigned   
逻辑检查的滞后应满足您的要求:

   SNO       Status
     1      Entering    
     2      Entering
     3      Assigned    
     4      Denied   
     5      Assigned   
假设SNO是连续的,没有间隙,则可以使用EXISTS:

WHERE子句中的相关子查询查看SNO-1,拒绝具有匹配状态的行。

假设SNO是连续的,没有间隙,则可以使用EXISTS:


WHERE子句中的相关子查询查看SNO-1,拒绝具有匹配状态的行。

在大多数Oracle数据库中,假设没有间隙是不现实的。@Matthewmpeak SNO很可能是用户指定的,在这种情况下,序列中没有间隔的假设不再是不合理的。假设…没有间隔在大多数Oracle数据库中不是一个现实的假设。@Matthewmpeak SNO很可能是用户指定的,在这种情况下,序列中没有间隔的假设不再是不合理的。
SELECT *
FROM MyTable t
WHERE NOT EXISTS (
    SELECT * FROM MyTable x WHERE t.SNO=x.SNO-1 AND t.Status=x.Status
)