按日期范围分组的 SQL

Sof*_*Guy 3 sql database postgresql database-schema

我有以下数据:

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
Run Code Online (Sandbox Code Playgroud)

我想用代码和日期范围对数据进行分组,以便输出变为:

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
Run Code Online (Sandbox Code Playgroud)

我已经考虑过了,但想不出如何使用 SQL 对这些数据进行分组。有任何想法吗?谢谢!

Gor*_*off 5

因此,您想根据相同的日期查找序列。

这是一个技巧:如果你row_number()在整个组和row_number()分区之间取差异code,那么对于具有相同代码的相邻行,它将是恒定的。剩下的只是聚合:

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;
Run Code Online (Sandbox Code Playgroud)