簡體   English   中英

使用遞歸公用表表達式,如 while 循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM