SQL - 用于对没有过程语言的日期进行分组的算法

时间:2016-09-08 09:00:26

标签: sql oracle algorithm date grouping

您好,并提前感谢您的帮助,我在Oracle SQL环境中工作。

我的问题在这张照片中说明:

image

输入:

我有一个属于客户的日期间隔,从未超出一个月的范围。我需要连接第一个间隔结束是一个月末的间隔,下一个间隔从下个月的第一天开始(这是他们连接的唯一方式)。

在&strong;" 之间的"天已经很明显,当新的时间间隔开始时,数字大于1并且当前行属于间隔有1。

一些细节:

  • 对于1个用户,可以有两个以上的间隔,在该示例中,有一个用户有三个间隔
  • 间隔时间可能长达数月=占据多行。
  • 间隔之间的间隔也可能长达几个月。

输出:

理想输出的具体示例在附图中。简单 - 我想要在整个时间间隔内指定每一行,其中包括行间隔,开始和结束。

Data:
ID  Start date  End date    Last start date Last end date   Days between
12  21.03.2016  31.03.2016                                  1
12  01.04.2016  04.04.2016  21.03.2016      31.03.2016      1
12  28.04.2016  30.04.2016  01.04.2016      04.04.2016      24
12  01.05.2016  20.05.2016  28.04.2016      30.04.2016      1
12  06.06.2016  30.06.2016  01.05.2016      20.05.2016      17
12  01.07.2016  13.07.2016  06.06.2016      30.06.2016      1

1 个答案:

答案 0 :(得分:0)

再次感谢Tim-biegeleisen的问题名称,从那里它很容易!我将来一定会记住这个解决方案。

我通过两个简单的步骤解决了这个问题。

首先对那些间隔使用虚拟变量,其中存在间隙:

    case when days_between=1 then 0 else 1 end as gap

然后我们根据间隙分配间隔

    sum(gap) over (partition by ID order by start_date)

由此我们只按ID和新变量分组,我们就完成了。