Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meniru Fungsi LEAD dan LAG dalam SQL Server 2008?

Bagaimana untuk Meniru Fungsi LEAD dan LAG dalam SQL Server 2008?

Barbara Streisand
Barbara Streisandasal
2024-12-28 21:23:11972semak imbas

How to Replicate LEAD and LAG Functionalities in SQL Server 2008?

Ganti untuk Fungsi LEAD LAG dalam SQL Server 2008

Dalam SQL Server 2008, ketidakupayaan untuk menggunakan fungsi LEAD dan LAG menimbulkan cabaran apabila membandingkan baris semasa dengan nilai dalam baris berikutnya. Artikel ini meneroka kaedah alternatif untuk pengguna SQL Server 2008 yang memerlukan fungsi ini.

Menyoal Baris Seterusnya dan Sebelumnya

Matlamatnya adalah untuk mengasingkan baris di mana baris semasa StatusId ialah 1 dan StatusId baris seterusnya ialah 6, dengan kedua-dua baris mempunyai cap masa minit yang sama. Memandangkan fungsi LEAD dan LAG tidak tersedia, kami boleh menggunakan gabungan kendiri.

Pendekatan Sertai Kendiri

Pertanyaan berikut mewujudkan cantuman antara jadual (dirujuk kepada sebagai t) dan jadual "baris seterusnya" (dirujuk sebagai tnext). Syarat untuk menyertai termasuk:

  • Nilai Id yang sepadan, menunjukkan baris bersebelahan
  • StatusId untuk t menjadi 1, menandakan baris semasa dengan status yang diingini
  • StatusId untuk tnext ialah 6, menunjukkan baris berikutnya dengan sasaran status
  • Perbezaan masa kurang daripada 60 saat antara medan MinStartTime, memastikan kedekatan dalam masa

Pertanyaan untuk Padanan Minit Tepat

Jika padanan minit yang tepat diperlukan dan bukannya jarak hanya dalam beberapa minit, pertanyaan boleh diubah suai untuk memasukkan syarat datepart(minit, t.MinStartTime) = datepart(minit, tnext.MinStartTime).

Contoh Pertanyaan

Menggunakan jadual yang disediakan sebagai contoh, berikut adalah kedua-duanya versi pertanyaan:

Versi 1 (dalam minit kedekatan):

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;

Versi 2 (padanan minit tepat):

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);

Output

Keluaran pertanyaan ini akan mendapatkan semula baris yang dikehendaki yang memenuhi kriteria yang ditentukan: Id 6, dengan StatusId ialah 1 dan diikuti dengan Id dengan StatusId 6 pada cap waktu minit yang sama (untuk Versi 2).

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn