我有以下数据:
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对这些数据进行分组。有任何想法吗?谢谢!
答案 0 :(得分:3)
所以,你想根据相同的日期找到序列。
以下是一个技巧:如果您对整个组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;