【发布时间】:2011-10-05 06:06:36
【问题描述】:
我有下表
Log
Date date
Description varchar
ID integer
给定日期作为参数,我必须找到编号。或从开始日期到之后的一个月每天记录的日志计数使用递归 cte。 有些日子可能没有任何日志,所以我必须将计数打印为 0。
例如:
select * from Log
返回
1 insert 2011-01-17
2 blah blah 2011-01-23
3 blah 2011-07-07
对于 2011-01-17 作为输入,输出应该是
2011-01-17 1
2011-01-18 0
2011-01-19 0
....
2011-01-23 1
.....
2011-02-17 0
我必须使用 recursive cte 来做到这一点。我不知道如何在每次递归中将日期递增 1 以及如何停止\终止递归。
这是我到目前为止所做的事情:
with cte as (
select '2011-01-17' as dat,count(*) as count
from log group by date
having date='2011-01-17'
union all
select dateadd(day,1,dat) as dat,count(*) as count
from log,cte
group by date
having date=dateadd(day,1,dat)
where dat<'2011-02-17'
)
select * from cte
【问题讨论】:
-
许多基本示例将向您展示如何做到这一点。至少提供您迄今为止尝试过的内容。
标签: sql tsql sql-server-2008 common-table-expression recursive-cte