我有以下数据集:
(StartTime,EndTime)
(2,2.30)
(3,4.30)
(5,6)
我需要考虑两者之间的时间差距 我需要的是:
(2,2.30)
(2.30,3)
(3,4.30)
(4.30,5)
(5,6)
如何在SQL中实现此目的。 我正在使用vertica数据库。
答案 0 :(得分:0)
您基本上需要使用LEAD
来生成两者之间的行。还有GFI的时间序列,但它并不真正适合这个问题,因为你处理的是时间范围,而不是静态切片。
CREATE TABLE mytable (StartTime interval,EndTime interval)
INSERT into mytable VALUES ( INTERVAL '2 minutes', INTERVAL '2.5 minutes');
INSERT into mytable VALUES ( INTERVAL '3 minutes', INTERVAL '4.5 minutes');
INSERT into mytable VALUES ( INTERVAL '5 minutes', INTERVAL '6 minutes');
SELECT StartTime, EndTime
from mytable
union all
SELECT EndTime, lead (StartTime, 1) OVER (order by StartTime)
from mytable
order by 1
最后你会得到一条记录,表示你可以在不需要的情况下过滤掉的开放范围。如果你想要的话,你也可以添加另一个联盟以获得类似的时间记录。