首页 > 解决方案 > 如何检查行的连续性?

问题描述

我有一个操作,如果它失败 - 它重试 5 次然后放弃。导致以下日志表:

LogId   OpId  Message
1       4     Retry 1...Failed
2       4     Retry 2...Failed
3       4     Retry 3...Failed
4       4     Retry 4...Failed
5       4     Retry 5...Failed
6       4     Max Retries exceeded - giving up

有时,重试后它会成功,这意味着我永远不会看到该Max Retries exceeded - giving upOpId 中的条目。

我就是我想要确定的。强制进入重试的操作(例如,有一个Retry X...条目),但没有一个Max Retries exceeded - giving up条目,因为重试在某个时间点成功。

我尝试使用 Window 函数,我认为这可能是可行的方法,但我不确定如何实际识别我想要的。

PS 每个@GMB 添加了自动递增字段

标签: sqlsql-serversql-server-2017

解决方案


对于这个数据集,您也许可以只使用聚合:

select opId
from mytable
group by opId
having 
    max(case when message like 'Retry%' then 1 end) = 1
    and max(case when message = 'Max Retries exceeded - giving up' then 1 end) is null

这为您提供了opId至少一条消息以 开头'Retry'且没有消息等于 的列表'Max Retries exceeded - giving up'


推荐阅读