【发布时间】: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