두 날짜 사이의 레코드 계산
다축 차트를 생성하려면 지정된 기간 내 각 날짜에 대해 생성된 레코드의 개수가 필요합니다. 날짜 범위.
문제 명령문
공통 테이블 표현식(CTE)을 사용하여 쿼리를 생성하려는 초기 시도에서 "피연산자 유형 충돌: datetime2가 int와 호환되지 않습니다."라는 오류가 발생했습니다. 이는 날짜 범위에 사용된 datetime2 데이터 유형과 일 오프셋에 대해 예상되는 정수가 일치하지 않기 때문에 발생합니다.
해결책
이 문제를 해결하려면 집계 테이블이나 함수가 더 나은 성능을 제공할 수 있습니다. Itzik Ben-Gan이 만든 이러한 집계 테이블 함수 중 하나가 여기에 표시됩니다.
WITH L0 AS ( SELECT 1 AS c FROM (VALUES(1),(1),(1),(1),(1),(1),(1),(1), (1),(1),(1),(1),(1),(1),(1),(1)) AS D(c) ), L1 AS ( SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B ), L2 AS ( SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B ), Nums AS ( SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum FROM L2 )
이 집계 테이블을 기반으로 Date_Range_T CTE를 만들 수 있습니다.
Date_Range_T (d_range) AS ( SELECT TOP(DATEDIFF(day, @StartDate, @EndDate) + 1) DATEADD(day, rownum - 1, @StartDate) AS d_range, DATEADD(day, rownum, @StartDate) AS d_rangeNext FROM Nums )
이 Date_Range_T CTE는 @StartDate와 @EndDate 사이의 날짜 범위를 제공합니다.
To 각 날짜의 레코드 수를 계산하려면 쿼리를 다음과 같이 작성할 수 있습니다.
SELECT d_range, COUNT(Id) AS Total FROM Date_Range_T LEFT JOIN tbl_Support_Requests R ON R.CreatedDate >= T.d_range AND R.CreatedDate < T.d_rangeNext GROUP BY d_range ORDER BY d_range ASC
이 쿼리는 원하는 결과, 즉 지정된 날짜 범위 내의 각 날짜에 대한 레코드 수를 반환합니다.
위 내용은 SQL에서 특정 날짜 범위 내의 레코드를 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!