2

私は次の表を持っています

   Log

 Date            date
 Description     varchar
 ID              integer

パラメータとして日付を指定すると、いいえを見つける必要があります。または、再帰 cte を使用して、開始日から 1 か月後まで毎日記録されたログの数。 一部の日にはログがない場合があるため、カウントを 0 として出力する必要があります。

元:

  select * from Log

戻り値

  1   insert      2011-01-17
  2   blah blah   2011-01-23
  3   blah        2011-07-07

2011 年 1 月 17 日を入力として、出力は次のようになります。

   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
4

1 に答える 1

5
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
于 2011-07-14T11:14:33.733 に答える