【问题标题】:How to order date ranges sequentially and remove overlaps in Teradata如何按顺序排列日期范围并删除 Teradata 中的重叠
【发布时间】:2019-12-16 03:22:47
【问题描述】:

我有一个包含期间开始和期间结束的日期范围列表。期间结束选择为期间开始日期后 3 个月

数据示例如下:

Row |Period start | Period end
1 |2018-01-01 | 2018-04-01
2 |2018-01-05 | 2018-04-05
3 |2018-04-02 | 2018-07-01
4 |2018-05-02 | 2018-08-02
5 |2018-09-10 | 2018-12-09

我希望按顺序排列期间开始和结束,并删除日期范围重叠的情况

这个例子的解决方案是:

Row |Period start | Period end
1 |2018-01-01 | 2018-04-01
3 |2018-04-02 | 2018-07-01
5 |2018-09-10 | 2018-12-09

解释我想要实现的逻辑:

第 1 行期间结束是 2018-04-01,我希望能够只包含期间开始严格大于此的下一行。 IE。第 3 行与 2018-04-02。

一旦选择 2018-04-02 作为后续行,我希望在此之后的下一行超出 (2018-07-02) 的期末范围。 IE。它将是第 5 行,因为 2018-09-10 不在 2018-07-01 范围内

是否有解决方案可以做到这一点? (无需递归)

【问题讨论】:

  • 您是要从表中实际删除行,还是从查询的输出中排除它们?
  • 顺便说一句,我认为如果没有递归或使用游标的存储过程,这将是不可能的。
  • 我只是希望它们被标记,以便我可以将它们从查询的输出中排除
  • 我已经使用存储过程和 while 循环解决了这个问题

标签: time teradata date-range overlapping teradata-sql-assistant


【解决方案1】:

在 Teradata 中,您可以使用RESET WHEN 子句; here you may find an example 解决了一个有点类似的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多