【发布时间】:2020-05-04 06:52:41
【问题描述】:
This is a follow-up to my earlier question。这个问题与我原来的问题类似,但有一个额外的转折,我想查看在设定的运行期间内先前服务的计数。所以说我有一张桌子:
id | client |date | service
1 | 1 | 1/2010 | A
2 | 1 | 1/2011 | A
3 | 1 | 1/2012 | A
4 | 1 | 1/2015 | A
我可以使用ROW_NUMBER() OVER (PARTITION BY client, service ORDER BY date) - 1 计算每个服务在给定日期之前执行了多少次,但是我如何进行查询以显示在给定日期之前以及在任何给定滚动期内执行的服务数量?
假设我想知道仅在过去 2 年中完成了多少 A 类服务。预期的结果是:
client |date | no of prior services
1 |1/2010 | 0
1 |1/2011 | 1
1 |1/2012 | 2
1 |1/2015 | 0 - no earlier services within the last two years.
我拥有的是类似的东西
select table0.*, count(table1.date)
from table table0
left outer join table table1
ON table0.client = table1.client
AND table0.date > table1.date
AND table1.date > DATEADD(year, -3, table0.date)
但这似乎不太奏效..
【问题讨论】:
标签: sql-server-2016 rolling-computation