我目前正在尝试在90天的滚动期内为客户提供不同的服务。我有使用总金额和超过分区的金额。但是,当我以不同的方式执行此操作时,SQL没有功能。
我试图将row_number()与over分区一起使用,并使用当前行和前90行,但这也不可用。
非常感谢您提出的解决此问题的建议。
我尝试使用两种方法来解决该问题,但由于上述限制,两种方法均失败了。
方法1
select date
,count(distinct(customer_id)) over partition () order by date rows current row and 89 preceding as cust_count_distinct
from table
方法2
select date
,customer_id
,row_number() over partition (customer_id) order by date rows current row and 89 preceding as rn
from table
-然后要过滤rn ='1',但是行功能在排名函数窗口中无法实现。
答案 0 :(得分:2)
最简单的方法是某种相关的子查询:
select d.date, c.nt
from (select distinct date from t) d cross apply
(select count(distinct customerid) as cnt
from t t2
where t2.date >= dateadd(day, -89, d.date) and
t2.date <= d.date
) c;
即使对于中等数据集,这也不是特别有效(即杀手级)。但这可能满足您的需求。
您可以限制返回日期以进行测试以查看其是否有效。