SNO Status
1 Entering
2 Entering
3 Assigned
4 Denied
5 Assigned
以上值是查询输出的一部分。 要求是Status列应该连续返回一个'Entering'(对于Sno 1和2)。 这里的其他行不应该受到影响。对于前者,'已分配' - 因为它不会连续发生。
答案 0 :(得分:2)
lag()
应该做你想做的事情:
with q as (< your query here> )
select sno, status
from (select q.*, lag(status) over (order by sno) as prev_status
from q
) q
where prev_status is null or prev_status <> status;
答案 1 :(得分:2)
假设SNO
是连续的,没有间隙,您可以使用EXISTS
:
SELECT *
FROM MyTable t
WHERE NOT EXISTS (
SELECT * FROM MyTable x WHERE t.SNO=x.SNO-1 AND t.Status=x.Status
)
WHERE
子句中的相关子查询会查看SNO-1
,拒绝匹配Status
的行。