按值组的连续日期范围对行进行分组

2023-12-02

考虑一些表T, 订购Col1, Col2, Date1, Date2:

Col1    Col2    Date1         Date2          rate
ABC     123     11/4/2014     11/5/2014      -90
ABC     123     11/4/2014     11/6/2014      -55
ABC     123     11/4/2014     11/7/2014      -90
ABC     123     11/4/2014     11/10/2014     -90

我想对数据进行分组,以便轻松审核更改/减少重复,所以我有

Col1    Col2    Date1         start_Date2    end_Date2      rate
ABC     123     11/4/2014     11/5/2014      11/5/2014      -90
ABC     123     11/4/2014     11/6/2014      11/6/2014      -55
ABC     123     11/4/2014     11/7/2014      11/10/2014     -90

如果我能得到另一列,行编号为1 2 3 3(唯一重要的是数字不同),然后GROUP BY那个专栏。

我的查询尝试:

SELECT *, DENSE_RANK() OVER (ORDER BY rate) island
FROM T
ORDER BY Date2

没有给出我正在寻找的东西:

Col1    Col2    Date1         Date2          rate     island
ABC     123     11/4/2014     11/5/2014      -90      1
ABC     123     11/4/2014     11/6/2014      -55      2
ABC     123     11/4/2014     11/7/2014      -90      1
ABC     123     11/4/2014     11/10/2014     -90      1

我希望查询能够识别第二组-90值应该被视为一个新组,因为它们出现在具有不同值的组之后rate.

[gaps-and-islands] SQL 标记非常有用,但我不太清楚当速率恢复到以前的值时如何处理。我应该如何修改我的查询?


您可以通过使用差异来识别组row_numbers()。连续值将有一个常数。

select col1, col2, date1, min(date2), max(date2), rate
from (select t.*,
             (row_number() over (partition by col1, col2, date1 order by date2) -
              row_number() over (partition by col1, col2, date1, rate order by date2)
             ) as grp
      from table t
     ) t
group by col1, col2, date1, rate, grp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按值组的连续日期范围对行进行分组 的相关文章

随机推荐