Alternatif kepada Fungsi SQL LEAD dan LAG dalam SQL Server 2008
Dalam SQL Server 2008, fungsi LEAD dan LAG tidak tersedia, yang boleh menimbulkan cabaran apabila membandingkan nilai antara baris berturut-turut. Panduan ini membentangkan pendekatan alternatif untuk mencapai kefungsian yang serupa.
Pernyataan Masalah
Matlamatnya adalah untuk mengenal pasti baris di mana baris semasa mempunyai StatusId 1 dan baris berikutnya mempunyai StatusId sebanyak 6, dengan masa dalam minit yang sama. Sebagai contoh, dalam jadual yang disediakan, kami ingin mendapatkan Id baris 6 kerana Id baris 6 mempunyai StatusId 1 dan baris Id 7 mempunyai StatusId 6 dan masanya pada dasarnya adalah sama: 2014-02-19 06: 11.
Penyelesaian 1: Self-Join
Satu pendekatan ialah self-join:
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 mengembalikan baris di mana Id baris semasa kurang satu daripada Id baris seterusnya , StatusId ialah 1 untuk baris semasa, 6 untuk baris seterusnya dan perbezaan masa di antara mereka adalah dalam 60 saat.
Penyelesaian 2: Minit Kalendar Sama
Jika anda memerlukan masa dalam minit kalendar yang sama, anda boleh mengubah suai pertanyaan seperti berikut:
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 and datepart(minute, t.MinStartTime) = datepart(minute, tnext.MinStartTime);
Pertanyaan ini juga menyemak sama ada minit kedua-dua baris adalah sama, memastikan ia tergolong dalam baris yang sama minit kalendar.
Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi SQL LEAD dan LAG dalam SQL Server 2008?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!