Alternatif kepada Fungsi LEAD dan LAG dalam SQL Server 2008
SQL Server 2008 tidak mempunyai fungsi LEAD dan LAG, yang digunakan untuk mengakses nilai seterusnya dan sebelumnya dalam urutan. Walau bagaimanapun, terdapat kaedah alternatif untuk mencapai kefungsian yang serupa.
Pernyataan Masalah
Pertimbangkan senario di mana anda ingin membandingkan status baris semasa dengan baris berikutnya. Secara khususnya, anda menyasarkan untuk mengenal pasti baris yang baris semasa mempunyai status '1' dan baris seterusnya mempunyai status '6', sambil memastikan cap masa untuk baris ini sepadan sehingga minit.
Penyelesaian
Satu pendekatan untuk mencapai ini dalam SQL Server 2008 adalah melalui penyertaan sendiri teknik:
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 secara berkesan membandingkan baris semasa (t) dengan baris berikutnya (tnext) berdasarkan syarat yang diberikan. Fungsi datediff memastikan perbezaan masa antara cap masa tidak melebihi 60 saat.
Perhatikan bahawa jika anda memerlukan pemadanan ketat minit masa kalendar, 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);
Dengan menggunakan teknik ganti ini, anda boleh mencapai kefungsian yang sama seperti fungsi LEAD dan LAG dalam SQL Server 2008.
Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi LEAD dan LAG dalam SQL Server 2008?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!