【问题标题】:Generate a contiguous period starting from two dates (for a pair of ID and Value)生成从两个日期开始的连续期间(对于一对 ID 和值)
【发布时间】:2019-05-24 15:11:43
【问题描述】:

我正在使用 Oracle 11 和 我需要从具有 2 个日期字段和 2 个字段的表中重建期间:id 和百分比值。

如果日期之间有连续性(对于每一对 ID 和值),我必须只报告一行,直到连续性不中断。 否则,我报告从表格中读取的期间。

我不知道是不是可以用纯 SQL 来完成,还是必须依赖 Cursor。

这是我的源表

ID  PercValue   START_DATE  END_DATE
1   50  01/01/2014  01/03/2014
1   50  01/04/2014  01/05/2014
1   53  01/06/2014  01/07/2014
1   53  01/08/2014  02/01/2014
1   60  02/02/2014  02/10/2014
1   60  02/11/2014  02/28/2014
1   60  03/10/2014  03/15/2014
2   60  03/15/2014  03/31/2014
2   61  04/01/2014  04/29/2014
2   61  05/01/2014  06/30/2014

这是我的目标

ID  PercValue   START_DATE  END_DATE
1   50  01/01/2014  01/05/2019
1   53  01/06/2014  02/01/2019
1   60  02/02/2019  02/28/2019
1   60  03/10/2019  03/15/2019
2   60  03/15/2019  03/31/2019
2   61  04/01/2019  04/29/2019
2   61  05/01/2019  06/30/2019

【问题讨论】:

  • 这可以通过纯SQL来完成。我建议阅读Tabibitosan Method。在你的情况下(每行两个日期),我相信逻辑看起来像end_date - SUM(end_date - start_date) OVER (PARTITION BY percvalue ORDER BY start_dt) AS grp

标签: oracle plsql oracle11g


【解决方案1】:
start_DATE >= to_date(substr(:from_date,1,10),'YYYY/MM/DD')
  end_DATE <= to_date(substr(:END_date,1,10),'YYYY/MM/DD')

将其用作日期参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多