Pengiraan perbezaan tarikh baris berturut-turut SQL
Menentukan selang masa antara rekod berturut-turut adalah penting untuk analisis data apabila bekerja dengan set data yang besar. Dalam contoh ini, pertanyaan SQL diperlukan untuk mengira perbezaan tarikh antara baris berturut-turut dengan nombor akaun yang sama.
Berikut ialah pertanyaan yang mungkin:
<code class="language-sql">SELECT T1.ID, T1.AccountNumber, T1.Date, MIN(T2.Date) AS NextDate, DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DaysDiff FROM YourTable T1 LEFT JOIN YourTable T2 ON T1.AccountNumber = T2.AccountNumber AND T2.Date > T1.Date GROUP BY T1.ID, T1.AccountNumber, T1.Date;</code>
Pertanyaan ini menggunakan LEFT JOIN
untuk membandingkan setiap baris dalam jadual T1
(jadual asal) dengan semua baris berikutnya dalam jadual T2
yang mempunyai nombor akaun yang sama. Ia kemudian menggunakan fungsi DATEDIFF
untuk mengira perbezaan tarikh dan mengumpulkan hasil dengan ID
, AccountNumber
dan Date
untuk mengalih keluar baris pendua. DATEDIFF(day, ...)
Menentukan bilangan hari untuk mengira perbezaan.
Kaedah lain adalah seperti berikut:
<code class="language-sql">SELECT ID, AccountNumber, Date, LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) AS NextDate, DATEDIFF(day, Date, LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date)) AS DaysDiff FROM YourTable;</code>
Pertanyaan ini menggunakan fungsi tetingkap LEAD
untuk mendapatkan tarikh baris seterusnya bagi setiap nombor akaun. LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date)
Dapatkan tarikh baris seterusnya bagi baris semasa, atau NULL jika tiada baris seterusnya. Kemudian hitung perbezaan tarikh dan tunjukkan hasilnya dalam format yang diperlukan. Kaedah ini secara amnya lebih cekap daripada LEFT JOIN
, terutamanya pada set data yang besar.
Kedua-dua kaedah boleh mengira perbezaan tarikh baris berturut-turut Kaedah yang mana untuk dipilih bergantung pada sistem pangkalan data dan keperluan prestasi anda. Kaedah kedua (menggunakan LEAD
) biasanya lebih ringkas dan cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Tarikh Antara Baris Berturut-turut dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!