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