Penyelesaian Gantian untuk Fungsi LEAD/LAG dalam SQL Server 2008
Apabila bekerja dengan SQL Server 2008, yang tidak mempunyai fungsi LEAD dan LAG, seseorang mungkin menghadapi kesukaran untuk membandingkan nilai baris semasa dengan baris berikutnya. Walau bagaimanapun, terdapat kaedah alternatif untuk mencapai fungsi ini.
Pertimbangkan senario di mana jadual mengandungi baris dengan ID berjujukan, yang mewakili kemajuan acara. Matlamatnya adalah untuk mengenal pasti baris di mana baris semasa mempunyai status 1, baris seterusnya mempunyai status 6 dan perbezaan masa antara dua baris adalah minimum (kurang daripada satu minit).
Untuk mencapai ini tanpa fungsi LEAD atau LAG, join sendiri boleh digunakan. Pertanyaan berikut melaksanakan operasi ini:
SELECT t.* FROM table t JOIN table tnext ON t.id = tnext.id - 1 AND t.StatusId = 1 AND tnext.StatusId = 6 AND DATEDIFF(SECOND, t.MinStartTime, tnext.MinStartTime) < 60;
Pertanyaan ini mendapatkan semula baris di mana baris semasa mempunyai status 1, baris seterusnya mempunyai status 6 dan perbezaan masa antara dua baris adalah kurang daripada 60 saat.
Jika perlawanan yang lebih tepat diperlukan, di mana perbezaan masa harus jatuh dalam minit kalendar yang sama, syarat tambahan boleh ditambahkan pada pertanyaan:
AND DATEPART(MINUTE, t.MinStartTime) = DATEPART(MINUTE, tnext.MinStartTime);
Pertanyaan yang disemak ini memastikan bahawa kedua-dua komponen masa dan tarikh minit sepadan.
Dengan memanfaatkan teknik sambung sendiri, adalah mungkin untuk mencapai yang serupa kefungsian sebagai fungsi LEAD dan LAG, menyediakan penyelesaian alternatif dalam SQL Server 2008.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meniru Fungsi LEAD/LAG dalam SQL Server 2008?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!