我有一个包含开始时间的表(使用示例中的数字来保持简单)以及事件的持续时间。考虑行之间的“差异”对行进行分组
我想确定“块”及其开始和结束时间。
每当前一行(按开始时间排序)的结束时间(开始时间+持续时间)与当前行的开始时间之间的差值为>=5
时,应开始新的“块”。
这是我的测试数据,其中包括的图形说明评价的尝试:
WITH test_data AS (
SELECT 0 s, 2 dur FROM dual UNION ALL --# ■■
SELECT 2 , 2 FROM dual UNION ALL --# ■■
SELECT 10 , 1 FROM dual UNION ALL --# ■
SELECT 13 , 4 FROM dual UNION ALL --# ■■■■
SELECT 15 , 4 FROM dual --# ■■■■
)
--# Should return
--# 0 .. 4 --# ■■■■
--# 10 .. 19 --# ■■■■■■■■■
第一块开始于0
和4
结束。由于与下一行的差异为>=5
,因此在10
处开始另一个块,其终止于19
。
我可以找出第一行的块,用LAG
,但我还没有找到如何进行。
我可以在PL/SQL循环中解决这个问题,但我试图避免出于性能原因。
有关如何编写此查询的任何建议?
在此先感谢,彼得
+1很酷的图形 – thomaspaulb 2010-11-25 13:04:34