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?

Linda Hamilton
Linda Hamiltonasal
2025-01-08 08:36:40391semak imbas

How to Calculate the Date Difference Between Consecutive Rows in SQL?

Menentukan Jurang Masa Antara Rekod Berjujukan dalam SQL

Tutorial ini menunjukkan cara mengira perbezaan tarikh antara baris berturut-turut untuk nombor akaun yang diberikan dalam jadual SQL.

Kaedah 1: Pendekatan Subkueri

Pertanyaan ini mengira perbezaan tarikh menggunakan subkueri:

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF(day, Date, NextDate) AS DateDifference
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>

Penjelasan:

Pertanyaan luar memilih ID, Nombor Akaun, Tarikh, Tarikh Seterusnya dikira dan perbezaan tarikh. Pertanyaan dalaman mengenal pasti tarikh seterusnya (NextDate) untuk setiap baris dengan mencari tarikh minimum yang lebih besar daripada tarikh baris semasa dan tergolong dalam akaun yang sama. DATEDIFF(day, Date, NextDate) mengira perbezaan hari.

Kaedah 2: Teknik Sertai Diri

Alternatif yang lebih cekap menggunakan gabungan sendiri:

<code class="language-sql">SELECT  T1.ID, 
        T1.AccountNumber, 
        T1.Date, 
        MIN(T2.Date) AS NextDate, 
        DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DateDifference
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>

Pendekatan ini menggunakan LEFT JOIN untuk membandingkan setiap baris dengan baris berikutnya yang mempunyai nombor akaun yang sama dan tarikh kemudian. MIN(T2.Date) mencari tarikh seterusnya dan DATEDIFF(day, ...) mengira perbezaan hari. Baris tanpa baris berikut akan mempunyai nilai NULL untuk NextDate dan DateDifference. Ambil perhatian bahawa hujah pertama DATEDIFF menentukan unit perbezaan (di sini, 'hari'). Laraskan mengikut keperluan (mis., 'bulan', 'tahun').

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!

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