当前位置: 首页 > 面试题库 >

使用SQL检测异常间隔

杨昊
2023-03-14
问题内容

我的问题很简单:我有一个包含一系列状态和时间戳的表(出于好奇,这些状态表示警报级别),我想查询该表以获取两个状态之间的持续时间。

看起来很简单,但是棘手的部分到了:我不能创建查找表,过程,并且它应该尽可能快,因为该表是一个拥有超过10亿条记录的小怪兽(没有在开玩笑!)…

该模式非常简单:

[pk]时间值

(实际上,还有第二个pk,但是对此没有用)

在一个真实的例子下面:

时间戳状态
2013-1-1 00:00:00 1
2013-1-1 00:00:05 2
2013-1-1 00:00:10 2
2013-1-1 00:00:15 2
2013-1-1 00:00:20 0
2013-1-1 00:00:25 1
2013-1-1 00:00:30 2
2013-1-1 00:00:35 2
2013-1-1 00:00:40 0

仅考虑2级警报的输出应如下所示,应报告2级警报的开始及其结束(达到0时):

StartTime结束时间间隔
2013-1-1 00:00:05 2013-1-1 00:00:20 15
2013-1-1 00:00:30 2013-1-1 00:00:40 10

我一直在尝试各种内部联接,但是所有这些都使我进入了惊人的笛卡尔爆炸。你们可以帮我找出实现此目标的方法吗?

谢谢!


问题答案:

这一定是我今天看到的最困难的问题之一-谢谢!我认为您可以使用CTE?如果是这样,请尝试以下操作:

;WITH Filtered
AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY dateField) RN, dateField, Status
    FROM Test    
)
SELECT F1.RN, F3.MinRN,
    F1.dateField StartDate,
    F2.dateField Enddate
FROM Filtered      F1, Filtered F2, (
SELECT F1a.RN, MIN(F3a.RN) as MinRN
FROM Filtered      F1a
   JOIN Filtered F2a ON F1a.RN = F2a.RN+1 AND F1a.Status = 2 AND F2a.Status <> 2
   JOIN Filtered F3a ON F1a.RN < F3a.RN AND F3a.Status <> 2
GROUP BY F1a.RN ) F3 
WHERE F1.RN = F3.RN AND F2.RN = F3.MinRN

和小提琴。我没有添加间隔,但是我想您可以从这里开始处理该部分。

祝你好运。



 类似资料:
  • 异常值检测架构概述。 { "event_log_path": "..." } event_log_path (optional, string) 指定异常事件日志的路径。 返回 上一级

  • 异常值检测和逐出是动态确定上游群集中,某些主机是否正在执行不同于其他主机的过程,并将其从正常负载平衡集中移除。 性能可能会受到不同程度的影响,例如连续的故障,时间成功率,时间延迟等。异常检测是被动健康检查的一种形式。 Envoy还支持主动健康检查。被动和主动健康检查可以一起使用或独立使用,形成整体上游健康检查解决方案的基础。 逐出算法 取决于异常值检测的类型,弹出或者以行内(例如在连续5xx的情况

  • { "consecutive_5xx": "...", "consecutive_gateway_failure": "...", "interval_ms": "...", "base_ejection_time_ms": "...", "max_ejection_percent": "...", "enforcing_consecutive_5xx" : "...",

  • 异常检测与处理 [MCE] mce=off 彻底禁用MCE(CONFIG_X86_MCE) [MCE] mce=dont_log_ce 不为已纠正错误(corrected error)记录日志。 [MCE] mce=容错级别[,超时] 容错级别(还可通过sysfs设置): 0 在出现未能纠正的错误时panic,记录所有已纠正的错误 1(默认值) 在出现未能纠正的错误时panic或SIGBUS,记录

  • 在我的Android JUnit测试用例中,一个< code>LoaderTestCase,我想测试我的加载器是否抛出异常或返回null。我看到测试中抛出了< code > NullPointerException ,测试被中止。 我正在尝试捕捉这样的异常: 但是LoaderTestCase没有捕获异常,而是中止,并出现以下异常: 你能告诉我我该怎么做吗 在我的方法 中抛出的测试异常 将 null

  • 基本模式学习和检测各种异常。 谢谢你。