首頁 > 資料庫 > mysql教程 > 如何在SQL中有效率地統計特定日期範圍內的記錄?

如何在SQL中有效率地統計特定日期範圍內的記錄?

Patricia Arquette
發布: 2024-12-18 16:42:11
原創
740 人瀏覽過

How to Efficiently Count Records Within a Specific Date Range in SQL?

計算兩個日期之間的記錄

要產生多軸圖表,您需要計算指定時間內為每個日期建立的記錄數日期範圍。

問題語句

使用公用表表達式 (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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板