計算兩個日期之間的記錄
要產生多軸圖表,您需要計算指定時間內為每個日期建立的記錄數日期範圍。
問題語句
使用公用表表達式 (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 提供」StartT Cate和@StartDate之間的日期範圍@EndDate.
要計算每個日期的記錄數,可以編寫如下查詢:
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中文網其他相關文章!