나는 일정 범위의 날짜를 생성하기 위해 CTE를 사용하고 있습니다.날짜 사이의 행
12/02/2010 10:00:00 12/02/2010 10:59:59
12/02/2010 11:00:00 12/02/2010 11:59:59
12/02/2010 12:00:00 12/02/2010 12:59:59
나는 엄청난 양의 날짜가 포함 된 색인 된보기에이 항목을 남겼다. 내가 날짜 사이에 계산을 위해 두 가지 옵션이 있습니다
거짓에 대한 사실에 대한
1) 내가 SUM 것이다 (경우)는 시작과 끝 날짜 사이 인 경우 테스트 할 log_date을 테스트 + 1, 0 범위 - 그래서 결과가 없으면 항상 '0'이됩니다.
12/02/2010 10:00:00 12/02/2010 10:59:59 0
12/02/2010 11:00:00 12/02/2010 11:59:59 1
12/02/2010 12:00:00 12/02/2010 12:59:59 0
2) 날짜 범위 당 WHERE 절을 사용하여 계산할 수 있습니다 (*). 당신은 1) 기대 효과가 있지만 성능에 엄청난 오버 헤드가 하듯이
12/02/2010 11:00:00 12/02/2010 11:59:59 1
2) 가능성이 8,000퍼센트 더 efficent하지만 지정한 날짜 범위 사이에 널 (null) 결과를 반환하는 필터를 적용 할 범위를 반환하지 .
효과적인 WHERE 절을 사용하지만 '0'으로 자세하게 설명하는 날짜 범위 행을 유지하는 방법이 있습니까?
SELECT [LABEL], [Display Start Date], [Display End Date],
COUNT(dbo.vCallLog.line_id) AS [Total Calls],
SUM(CASE WHEN ([LOG].line_result = 1) THEN 1 ELSE 0 END) AS [1 Calls],
FROM [DATE RANGE FUNCTION] LEFT JOIN
dbo.vCallLog WITH (noexpand) as [LOG] on 0> -1
WHERE ([LOG].line_date BETWEEN [Start Date] AND [End Date])
GROUP BY [Start Date], [End Date], [Display Start Date], [Display End Date], [LABEL]
불행히도, 일치하는 행이없는 범위는 여전히 무시됩니다. –
예제를 실행 해 보았습니다. 테스트 케이스에서 출력을 추가했습니다. –
예가 예상대로 작동하므로 비슷한 개념 테이블 (날짜 범위가있는 날짜, 다른 날짜 목록 ... 본질적으로)이 실패하면 혼란 스럽습니다. 항상 왼쪽 조인에서 예상했던 것을 복제합니다. 실제로 '날짜 행'을 포함하는 색인 된보기가 요인이 될 수 있습니까? –