[英]use recursive common table expressions like a while loop
我有下表
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 作為輸入,output 應該是
2011-01-17 1
2011-01-18 0
2011-01-19 0
....
2011-01-23 1
.....
2011-02-17 0
我必須使用遞歸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
WITH days (d, maxd) AS
(
SELECT MIN(date), MAX(date)
FROM log
UNION ALL
SELECT DATEADD(day, 1, d), maxd
FROM days
WHERE d < maxd
)
SELECT d, COUNT(id)
FROM days
LEFT JOIN
log l
ON l.date = d
GROUP BY
d
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.