Rumah >pangkalan data >tutorial mysql >Bagaimana Mengenalpasti Baris dengan Perubahan Nilai Dengan Cekap Menggunakan ROW_NUMBER()?
Memilih Baris dengan Perubahan Nilai Menggunakan ROW_NUMBER
Dalam konteks jadual di mana lajur nilai mencerminkan keadaan berubah dari semasa ke semasa, memilih detik apabila nilai itu berubah boleh menjadi tugas analisis yang berharga. Artikel ini membentangkan penyelesaian menggunakan fungsi ROW_NUMBER untuk mengenal pasti baris sedemikian, mengambil kira kedua-dua senario di mana nilai boleh meningkat atau turun naik.
Penyelesaian untuk Meningkatkan Nilai
Andaikan nilai hanya boleh meningkat, kami menggunakan pendekatan berikut:
;WITH x AS ( SELECT value, time, rn = ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Time) FROM dbo.table ) SELECT * FROM x WHERE rn = 1;
ROW_NUMBER fungsi membahagikan jadual dengan lajur nilai dan memberikan nombor berturut-turut kepada baris mengikut susunan nilai masanya dalam setiap partition. Dengan memilih baris dengan ROW_NUMBER ialah 1, kami mendapatkan kejadian pertama bagi setiap nilai yang berbeza, yang menandakan perubahan dalam nilai.
Penyelesaian untuk Nilai Berubah-ubah
Apabila nilai boleh berubah-ubah, kami menyesuaikan pendekatan kami untuk menangani kerumitan ini:
DECLARE @x TABLE(value INT, [time] DATETIME) INSERT @x VALUES (0,'20120615 8:03:43 PM'),-- (1,'20120615 8:03:43 PM'),--* (1,'20120615 8:03:48 PM'),-- (1,'20120615 8:03:53 PM'),-- (1,'20120615 8:03:58 PM'),-- (2,'20120615 8:04:03 PM'),--* (2,'20120615 8:04:08 PM'),-- (3,'20120615 8:04:13 PM'),--* (3,'20120615 8:04:18 PM'),-- (3,'20120615 8:04:23 PM'),-- (2,'20120615 8:04:28 PM'),--* (2,'20120615 8:04:33 PM'); ;WITH x AS ( SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time) FROM @x ) SELECT x.value, x.[time] FROM x LEFT OUTER JOIN x AS y ON x.rn = y.rn + 1 AND x.value <> y.value WHERE y.value IS NOT NULL;
Dalam kes ini, kami menetapkan ROW_NUMBERS kepada keseluruhan set data dalam susunan kronologi. Kami kemudian melakukan LEFT OUTER JOIN pada jadual dengan dirinya sendiri, memadankan baris dengan ROW_NUMBERS berturut-turut dan nilai tidak sama. Hasilnya memastikan pemilihan hanya baris yang mempunyai nilai yang berbeza dalam baris berikut.
Atas ialah kandungan terperinci Bagaimana Mengenalpasti Baris dengan Perubahan Nilai Dengan Cekap Menggunakan ROW_NUMBER()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!