【发布时间】:2018-11-16 02:12:27
【问题描述】:
我需要将第一行中的日期(end dt)与第二行中的日期(strt dt)进行比较,如果匹配,我需要获取第二行的 strt dt。 如果它不匹配,我需要拿起第一行的 strt dt。一个订阅和频道包可以有多行。 我发现很难在 teradata 中编写查询以获得所需的输出。
以下是案例和预期结果。
案例一
Subscription Channel package Start dt End dt
11111112 Sports 7/3/2015 11/28/2015
11111112 Sports 4/1/2016 11/23/2016
11111112 Sports 11/23/2016 12/17/2017
需要输出
Subscription Channel package Start dt End dt
11111112 Sports 4/1/2016 12/17/2017
案例二
Subscription Channel package Start dt End dt
11111112 Sports 7/3/2015 11/28/2015
11111112 Sports 11/28/2015 4/1/2016
11111112 Sports 4/1/2016 11/23/2016
11111112 Sports 11/23/2016 12/17/2017
需要输出
Subscription Channel package Start dt End dt
11111112 Sports 7/3/2015 12/17/2017
我试过了
MIN(Start dt) OVER (PARTITION BY Subscription , Channel package
ORDER BY Start dt ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING
) AS NXT Start dt
但由于我在使用资格时遇到了一些问题,所以无法走得更远。
【问题讨论】:
-
窗口函数不会减少行数。你的问题不清楚。不满足条件的行会发生什么情况?如果顺序多行满足条件怎么办?您真正想要完成什么?
-
是的,所以如果多行满足第 2 行 strt dt 与第 1 行 end dt 匹配的条件,这确实意味着订阅的频道包没有结束并且它是错误关闭的,那么我想要开始日期的最小值。但是,如果最后一个结束和下一个开始之间存在差距,那么它是一个正确的结束,我想要它下一个开始的日期。结果中应该有订阅和频道包组合的一行。
-
这个问题真的不清楚。我建议你删除这个问题(它没有答案)。问另一个问题。提供一个包含三个左右不同示例的表格。显示您想要的结果。解释将行组合在一起的逻辑。 “与下一行比较”的概念并不完全符合您的要求。
-
Aniket 似乎正在寻求折叠基于订阅和频道包的连续序列链。我认为这可以通过窗口聚合和派生表来完成,我只是没有时间在 Teradata 实例中模拟数据。