sql - 如何检查行的连续性?
问题描述
我有一个操作,如果它失败 - 它重试 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 up
OpId 中的条目。
我就是我想要确定的。强制进入重试的操作(例如,有一个Retry X...
条目),但没有一个Max Retries exceeded - giving up
条目,因为重试在某个时间点成功。
我尝试使用 Window 函数,我认为这可能是可行的方法,但我不确定如何实际识别我想要的。
PS 每个@GMB 添加了自动递增字段
解决方案
对于这个数据集,您也许可以只使用聚合:
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'
。
推荐阅读
- c++ - 在 Qt 中为新创建的操作设置快捷方式
- visual-studio-code - 如何从正在运行的容器中分离 VSCode?
- java - 如何在for循环中跳出while循环
- python - 如何存储和读取 4d numpy 数组
- lotus-notes - 如果时间在 00.00 和 03.00 AM 之间,则获取布尔值 true
- r - 如何调试模拟退火代码?
- python - Pandas Column(列表)到列和行
- angular - 如何在 catchError 中发出另一个请求?
- windows - 批量查找唯一单词并将 100 行复制到文本文件
- python - 如何在部署 lambda 函数之前删除 ptvsd 调试代码