我有以下数据:
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对数据进行分组。有任何想法吗?谢谢!
因此,您想根据相同的日期查找序列。
这是个窍门:如果您row_number()将整个组和row_number()划分为之间的差code,那么对于具有相同代码的相邻行,该差将是恒定的。剩下的只是聚合:
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;