分离组的SQL查询

时间:2016-11-28 00:23:58

标签: sql sql-server tsql

请考虑下表

产品代码标志日期
---------------------------------------- -
A N 2015年1月10日
A N 2015年2月10日
一个Ÿ2015年4月10日
一个ÿ2015年5月10日
一个ÿ二○一五年十二月一十日
A N 13/10/2015
A N 15/10/2015
一个ÿ16/10/2015
一个ÿ16/10/2015
一个ÿ17/10/2015
B n的2015年1月12日
B n的2015年2月12日
B Y形2015年8月12日
B n的2015年8月12日
B n的2015年9月12日

可能是什么SQL查询给我低于resultL

ProductCode标志StartDate结束日期
---------------------- ---------------------------------------------
A N 2015年1月10日2015年2月10日
一个Ÿ2015年4月10日二○一五年十二月一十日
A N 13/10/2015 15/10/2015
甲ÿ16/10/2015 17/10/2015
B n的2015年1月12日2015年2月12日
B Y形2015年8月12日2015年8月12日
B n的2015年8月12日2015年9月12日

感谢。

1 个答案:

答案 0 :(得分:4)

这里的关键是为每个产品分配连续的N和Y标志组。此后,它只是对分类群体的分组操作。

with grps as (    
 select t.*,
-row_number() over(partition by productcode,flag order by dt) 
+ row_number() over(partition by productcode order by dt) grp
from t
) 
select productcode,flag,min(dt) startdate,max(dt) enddate 
from grps
group by productcode,flag,grp
order by 1,3

<强> Sample Demo