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

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

Susan Sarandon
Susan Sarandonasal
2025-01-08 08:26:42479semak imbas

How to Calculate Date Differences Between Consecutive Rows for a Specific Account Number in SQL?

Mengira Perbezaan Tarikh Dengan Cekap Antara Baris Berturut-turut dalam SQL untuk Akaun Tertentu

Artikel ini menunjukkan dua pertanyaan SQL untuk mengira perbezaan tarikh antara baris berturut-turut untuk nombor akaun tertentu. Kaedah yang dibentangkan menawarkan tahap kecekapan yang berbeza-beza.

Kaedah 1: Menggunakan LEFT JOIN dan MIN()

Pendekatan ini menggunakan LEFT JOIN untuk membandingkan setiap baris dengan baris berikutnya untuk akaun yang sama. Fungsi MIN() mencari tarikh seterusnya.

<code class="language-sql">SELECT  T1.ID, 
        T1.AccountNumber, 
        T1.Date, 
        MIN(T2.Date) AS Date2, 
        DATEDIFF("D", 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 menyertai jadual (YourTable) dengan dirinya sendiri, membandingkan setiap baris (T1) dengan semua baris berikut untuk nombor akaun yang sama (T2). MIN(T2.Date) mencari tarikh berikutnya yang paling awal dan DATEDIFF mengira perbezaan hari. Pengumpulan memastikan hasil untuk setiap baris asal.

Kaedah 2: Menggunakan Subkueri untuk Meningkatkan Kecekapan

Untuk set data yang lebih besar, pendekatan subkueri selalunya terbukti lebih cekap. Kaedah ini secara langsung menggabungkan pengiraan tarikh dalam pertanyaan utama.

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF("D", Date, NextDate) AS DaysDiff
FROM    (   SELECT  ID, 
                    AccountNumber,
                    Date,
                    (   SELECT  MIN(Date) 
                        FROM    YourTable T2
                        WHERE   T2.AccountNumber = T1.AccountNumber
                        AND     T2.Date > T1.Date
                    ) AS NextDate
            FROM    YourTable T1
        ) AS T</code>

Di sini, subkueri bersarang untuk mencari NextDate bagi setiap baris. Ini mengelakkan operasi JOIN yang berpotensi kurang cekap. Pertanyaan luar kemudian mengira DaysDiff menggunakan DATEDIFF.

Kedua-dua kaedah mencapai hasil yang sama: mengira perbezaan tarikh antara rekod berturut-turut untuk setiap nombor akaun. Walau bagaimanapun, untuk prestasi optimum dengan jadual besar, Kaedah 2 (menggunakan subkueri) biasanya disyorkan. Pilih kaedah yang paling sesuai dengan volum data dan sistem pangkalan data anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Tarikh Antara Baris Berturut-turut untuk Nombor Akaun Tertentu dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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