Rumah > pangkalan data > tutorial mysql > Bagaimana Mengenalpasti Baris SQL Di Mana Nilai Lajur Telah Berubah?

Bagaimana Mengenalpasti Baris SQL Di Mana Nilai Lajur Telah Berubah?

Patricia Arquette
Lepaskan: 2024-12-26 20:43:10
asal
211 orang telah melayarinya

How to Identify SQL Rows Where Column Values Have Changed?

Baris Pertanyaan dengan Nilai Lajur Berubah Menggunakan SQL

Bagaimanakah seseorang boleh menentukan kejadian perubahan nilai lajur dalam jadual? Pertanyaan ini membenarkan pengecaman baris yang nilai lajur tertentu telah mengalami pengubahsuaian.

Untuk menggambarkan, pertimbangkan jadual berikut:

Value    Time
0        15/06/2012 8:03:43 PM
1        15/06/2012 8:03:43 PM     *
1        15/06/2012 8:03:48 PM 
1        15/06/2012 8:03:53 PM
1        15/06/2012 8:03:58 PM     
2        15/06/2012 8:04:03 PM     *
2        15/06/2012 8:04:08 PM
3        15/06/2012 8:04:13 PM     *
3        15/06/2012 8:04:18 PM
3        15/06/2012 8:04:23 PM
2        15/06/2012 8:04:28 PM     *
2        15/06/2012 8:04:33 PM     
Salin selepas log masuk

Objektifnya adalah untuk memilih baris yang ditandakan dengan asterisk, menunjukkan perubahan nilai. Ini penting untuk menentukan selang masa yang dikaitkan dengan perubahan tersebut, yang boleh dimanfaatkan untuk pertanyaan pangkalan data lain.

Penyelesaian:

Melaksanakan pertanyaan SQL dengan fungsi tetingkap dan nombor baris, kami memperoleh yang dikehendaki baris:

;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;
Salin selepas log masuk

Penjelasan:

  1. Fungsi ROW_NUMBER() memberikan nombor baris berjujukan dalam setiap partition berdasarkan lajur Nilai, dengan itu mewujudkan kumpulan nilai yang sama.
  2. WHERE rn = 1 keadaan berikutnya hanya memilih yang pertama baris dalam setiap kumpulan, mewakili kejadian awal setiap nilai yang berbeza.

Pertimbangan Tambahan:

  • Untuk peningkatan nilai sahaja, penyelesaiannya menjadi lebih mudah :
SELECT * FROM table WHERE value <> LAG(value) OVER (ORDER BY time);
Salin selepas log masuk
  • Jika nilai berubah naik dan turun, pendekatan yang sedikit perlahan diperlukan:
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;
Salin selepas log masuk

Dengan memanfaatkan kuasa fungsi tetingkap SQL, pertanyaan ini secara berkesan mendapatkan semula baris yang nilai lajur telah berubah, memberikan cerapan berharga tentang turun naik data.

Atas ialah kandungan terperinci Bagaimana Mengenalpasti Baris SQL Di Mana Nilai Lajur Telah Berubah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan