Mengira Perbezaan Nilai Baris dengan Cekap dalam Jadual SQL
Panduan ini menunjukkan dua kaedah untuk mengira perbezaan antara nilai baris berturut-turut dalam jadual SQL, memfokuskan pada struktur jadual bukan urutan. Kaedah pertama sesuai untuk semua versi SQL, manakala yang kedua menggunakan fungsi tetingkap untuk prestasi yang lebih baik dalam SQL Server 2012 dan kemudian.
Kaedah 1: Sertai Sendiri (Semua Versi SQL)
Pendekatan ini menggunakan LEFT JOIN
untuk membandingkan setiap baris dengan baris berikutnya berdasarkan pengecam baris (rowInt
dalam contoh ini).
<code class="language-sql">SELECT current.rowInt, current.Value, ISNULL(next.Value, 0) - current.Value AS ValueDifference FROM sourceTable AS current LEFT JOIN sourceTable AS next ON next.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > current.rowInt)</code>
Fungsi ISNULL
mengendalikan kes apabila baris tidak mempunyai pengganti (baris terakhir), memberikan perbezaan 0 untuk mengelakkan nilai NULL
.
Kaedah 2: Fungsi Tetingkap LEAD() (SQL Server 2012 dan lebih baru)
Untuk kecekapan dipertingkatkan dalam versi SQL Server yang lebih baharu, fungsi tetingkap LEAD()
menyediakan penyelesaian yang lebih diperkemas:
<code class="language-sql">SELECT RowInt, Value, LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value AS ValueDifference FROM sourceTable</code>
LEAD(Value, 1, 0)
mendapatkan semula nilai dari baris seterusnya (offset 1), lalai kepada 0 jika tiada baris seterusnya wujud. Ini secara langsung mengira perbezaan, menghapuskan keperluan untuk menyertai sendiri. Kaedah ini biasanya lebih pantas dan lebih mudah dibaca.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Perbezaan Nilai Baris dalam Jadual SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!