如何连续几周找到

时间:2018-02-13 21:42:34

标签: sql sql-server

我在尝试连续几周销售产品时遇到了一些麻烦。我已经将日期转换为周数并为其分配了一个号码,但是很多人都没有销售。如何查找是否有超过3周的销售?

当前数据:

Product_ID ProductCategory  WeekNumberOfYear
123        CSF              8
123        CSF              10
456        CSF              1
456        CSF              2
456        CSF              3
456        CSF              4
789        MLI              1
789        MLI              2
789        MLI              3

正如您所见,产品456是唯一连续销售超过3周的产品

我的输出应该是:

Product_ID ProductCategory  TotalConsecutiveWeeks
456        CSF              4

OR

Product_ID ProductCategory
456        CSF

如何避免3周或更短时间的非连续销售?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

好的,所以你可以使用下面的查询来查找所有趋势超过3周的产品。

提示:将where子句中的3更改为趋势所需的最少周数所需的任何数字 Working demo

create table sales (Product_ID int, ProductCategory varchar(10),  WeekNumberOfYear int)
insert into sales values
(123,'CSF',8)
,(123,'CSF',10)
,(456,'CSF',1)
,(456,'CSF',2)
,(456,'CSF',3)
,(456,'CSF',4)
,(789,'MLI',1)
,(789,'MLI',2)
,(789,'MLI',3)
;

; with cte as
(
    select *, 
    idx= WeekNumberOfYear- row_number() over (partition by product_id order by weekNumberOfYear)
    from sales
   )

 select 
 product_id,
 ProductCategory,
 count=count(1) 
 from cte
 group by product_id,ProductCategory,idx 
 having count(1)>3