Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Perbezaan Tarikh Antara Baris Berturut-turut dalam SQL?

Bagaimana untuk Mengira Perbezaan Tarikh Antara Baris Berturut-turut dalam SQL?

Mary-Kate Olsen
Lepaskan: 2025-01-08 08:32:42
asal
229 orang telah melayarinya

How to Calculate Date Differences Between Consecutive Rows in SQL?

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

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

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!

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