2009-11-23 5 views
2

각 항목의 생성 날짜가있는 웹 사이트 게시물이 있습니다.날짜 간격이없는 날짜 당 항목 수

내가 좋아하는 테이블을 반환하려면 :

Date   Posts 
16-11-2009 5 
17-11-2009 0 
18-11-2009 4 
etc 

하지만 올바른 SQL을 찾기 위해 사투를 벌인거야. 날짜별로 그룹화 된 게시물을 쉽게 얻을 수 있지만 게시물이없는 날짜는 반환되지 않습니다 (예 : 17-11-2009).

내가 원하는 것을 제공 할 SQL이 있습니까? 또는 게시물이없는 요일을 처리하기 위해 비 SQL 코드를 사용해야합니까?

답변

3
WITH dates AS 
     (
     SELECT CAST('2009-01-01' AS DATETIME) AS d 
     UNION ALL 
     SELECT DATEADD(day, 1, d) 
     FROM dates 
     WHERE d <= GETDATE() 
     ) 
SELECT d, COUNT(posts.id) 
FROM dates 
LEFT JOIN 
     posts 
ON  posts.date >= d 
     AND posts.date < DATEADD(day, 1, d) 
GROUP BY 
     d 
OPTION (MAXRECURSION 0) 
0

간단한 트릭은 당신이 필요한 모든 날짜와 테이블이 ... 그리고 내가 바로 조 기억 경우,이 테이블 및 게시물

와 하나 사이에 외부를 사용하여 가입하는 것입니다 셀코는 공휴일 계산을 위해 그와 비슷한 것을 조언합니다.