;with cte as (
select Domain_Id, Starting_Date, End_Date
from Que_Date
union all
select t.Domain_Id, cte.Starting_Date, t.End_Date
from cte
join Que_Date t on cte.Domain_Id = t.Domain_Id and cte.End_Date = t.Starting_Date),
cte2 as (
select *, rn = row_number() over (partition by Domain_Id, End_Date order by Domain_Id)
from cte
)
select DISTINCT Domain_Id, Starting_Date, max(End_Date) enddate
from cte2
where rn=1
group by Domain_Id, Starting_Date
order by Domain_Id, Starting_Date;
select * from Que_Date
这是我写的代码,但是我得到了一个额外的行,即第二行是额外的,预期的输出应该只有第1行,第3行和第4行作为输出,所以请帮助我 .
我附上了一个显示输入,例外输出和我得到的输出的图像 .
2 回答
我使用了@stepup提供的相同的表创建脚本,但您也可以通过这种方式获得结果 .
您可以使用自联接和Firs_value以及组中的最后一个值,以确保您在相同的ID和重叠日期内进行比较 .
输出:
你的第一个
cte
你有这么多的结果 . 您的第一个cte
包含域名 . 因此,您无法根据cte
过滤域名 . 所以你查询有不必要的行 .尝试此解决方案 . Cte
ConsistentDomains
只有一致的域名 . 因此,基于此cte,我们可以得到不重叠的结果 .创建和填充数据:
查询以查找不重叠的结果:
输出: