我的问题很简单:我有一个包含一系列状态和时间戳的表(出于好奇,这些状态表示警报级别),我想查询此表以获得两个状态之间的持续时间。
看起来很简单,但棘手的部分来了:我不能创建查找表、过程,它应该尽可能快,因为这个表是一个拥有超过 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 时):
开始时间结束时间间隔 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
我一直在尝试各种内部连接,但所有这些都将我引向了惊人的笛卡尔爆炸。你们能帮我想出一个方法来完成这个吗?
谢谢!