Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Perbezaan Tarikh Antara Baris Berturut-turut untuk Nombor Akaun Tertentu dalam 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!