Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Rekod Dengan Cekap Dalam Julat Tarikh Tertentu dalam SQL?

Bagaimana untuk Mengira Rekod Dengan Cekap Dalam Julat Tarikh Tertentu dalam SQL?

Patricia Arquette
Lepaskan: 2024-12-18 16:42:11
asal
740 orang telah melayarinya

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

Mengira Rekod Antara Dua Tarikh

Untuk menjana carta berbilang paksi, anda memerlukan kiraan rekod yang dibuat untuk setiap tarikh dalam tempoh yang ditentukan julat tarikh.

Pernyataan Masalah

Permulaan cubaan mencipta pertanyaan menggunakan ungkapan jadual biasa (CTE) menghadapi ralat "Pertembungan jenis operasi: datetime2 tidak serasi dengan int." Ini terhasil daripada ketidakpadanan antara jenis data datetime2 yang digunakan untuk julat tarikh dan integer yang dijangkakan untuk offset hari.

Penyelesaian

Untuk menangani isu ini, pengiraan jadual atau fungsi boleh menawarkan prestasi yang lebih baik. Satu fungsi jadual pengiraan sedemikian, yang dicipta oleh Itzik Ben-Gan, dibentangkan di sini:

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 )
Salin selepas log masuk

Berdasarkan jadual penjumlahan ini, Julat_Tarikh_T CTE boleh dibuat:

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
    )
Salin selepas log masuk

Julat_Tarikh_T ini CTE menyediakan julat tarikh antara @StartDate dan @EndDate.

Untuk mengira kiraan rekod untuk setiap tarikh, pertanyaan boleh ditulis seperti berikut:

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
Salin selepas log masuk

Pertanyaan ini akan mengembalikan hasil yang diingini: kiraan rekod untuk setiap tarikh dalam julat tarikh yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Rekod Dengan Cekap Dalam Julat Tarikh Tertentu dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan