SQL Server-通过行窗口函数对函数或row_numer进行计数

时间:2019-02-12 13:29:06

标签: sql sql-server

我目前正在尝试在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',但是行功能在排名函数窗口中无法实现。

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;

即使对于中等数据集,这也不是特别有效(即杀手级)。但这可能满足您的需求。

您可以限制返回日期以进行测试以查看其是否有效。