【问题标题】:SQL Group by Date RangeSQL 按日期范围分组
【发布时间】:2014-10-11 10:42:23
【问题描述】:

我有以下数据:

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 对这些数据进行分组。有任何想法吗?谢谢!

【问题讨论】:

    标签: sql database postgresql database-schema


    【解决方案1】:

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

    这里有一个技巧:如果您将整个组的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;
    

    【讨论】:

    • 非常感谢 Gordon,你真棒!
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 2013-11-04
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多