SQL:将小跨度变成1个大连续跨度
我有一些数据,一段时间后,一类数据可以更新SQL:将小跨度变成1个大连续跨度,sql,teradata,Sql,Teradata,我有一些数据,一段时间后,一类数据可以更新 ID Type Start End 1 A 01/01/2017 02/01/2017 1 A 02/01/2017 03/01/2017 1 A 03/01/2017 05/01/2017
ID Type Start End
1 A 01/01/2017 02/01/2017
1 A 02/01/2017 03/01/2017
1 A 03/01/2017 05/01/2017
1 A 04/01/2017 06/01/2017
1 A 09/01/2017 10/01/2017
我目前正在做以下工作
SELECT
A.ID,
A.Type,
B.Start,
A.End
FROM my_data as A
INNER JOIN my_data as B
ON A.ID = B.ID
AND A.start>B.start
AND A.start < B.end
WHERE A.type = B.Type
AND A.end-B.start <=365;
我只是在新桌子上重复类似的逻辑。但在现实生活中,这需要很多次,感觉应该有一个更简单的解决方案
我想要的桌子是这样的:
ID Type Start End
1 A 01/01/2017 06/01/2017
1 A 09/01/2017 10/01/2017
Teradata提供了标准SQL的良好扩展,以规范重叠范围:
SELECT
ID
,Type
-- split the period back into seperate dates
,Begin(pd) AS Start
,End(pd) AS End
FROM
(
SELECT NORMALIZE
ID
,Type
-- NORMALIZE only works with periods, so create it on the fly
,PERIOD(Start, End) AS pd
FROM my_data
) AS dt
SELECT
ID
,Type
-- split the period back into seperate dates
,Begin(pd) AS Start
,End(pd) AS End
FROM
(
SELECT NORMALIZE
ID
,Type
-- NORMALIZE only works with periods, so create it on the fly
,PERIOD(Start, End) AS pd
FROM my_data
) AS dt