按日期范围分组的 SQL Group by 语句

3

我有以下数据:

Date        Code
2014-08-01  A
2014-08-02  A
2014-08-03  A
2014-08-04  A
2014-08-05  A
2014-08-06  A
2014-08-07  A
2014-08-08  XXXX
2014-08-09  XXXX
2014-08-10  BB
2014-08-11  CCC
2014-08-12  CCC
2014-08-13  CCC
2014-08-14  CCC
2014-08-15  CCC
2014-08-16  CCC
2014-08-17  CCC
2014-08-18  XXXX
2014-08-19  XXXX
2014-08-20  XXXX
2014-08-21  XXXX
2014-08-22  XXXX
2014-08-23  XXXX
2014-08-24  XXXX
2014-08-25  XXXX
2014-08-26  XXXX
2014-08-27  XXXX
2014-08-28  XXXX
2014-08-29  XXXX
2014-08-30  XXXX
2014-08-31  XXXX

我希望能够将数据按代码和日期范围分组,以便输出结果如下:
Min Date    Max Date    Code
2014-08-01  2014-08-07  A
2014-08-08  2014-08-09  XXXX
2014-08-10  2014-08-10  BB
2014-08-11  2014-08-17  CCC
2014-08-18  2014-08-31  XXXX

我已经考虑了这个问题,但无法想出如何使用SQL对数据进行分组。有什么建议吗?谢谢!

1个回答

6

所以,您想根据日期查找相同的序列。

这里有一个技巧:如果您取整个组上的row_number()与按code分区的row_number()之间的差异,那么对于具有相同代码的相邻行,它将是恒定的。其余部分只是聚合:

select  min(date), max(date), code
from (select t.*,
             (row_number() over (order by date) -
              row_number() over (partition by code order by date)
             ) as grpid
      from followingdata t
     ) t
group by grpid, code;

非常感谢你,Gordon,你真棒! - Software Guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接