Rumah > pangkalan data > tutorial mysql > Bagaimanakah SQL Boleh Mengenalpasti Perubahan dalam Nilai Lajur Dari Masa?

Bagaimanakah SQL Boleh Mengenalpasti Perubahan dalam Nilai Lajur Dari Masa?

Mary-Kate Olsen
Lepaskan: 2024-12-21 18:54:09
asal
816 orang telah melayarinya

How Can SQL Identify Changes in Column Values Over Time?

Mengenal pasti Perubahan dalam Nilai Lajur Menggunakan SQL

Masalah:

Andaikan anda mempunyai jadual dengan dua lajur: Nilai dan Masa. Anda ingin mengenal pasti baris di mana lajur Nilai telah berubah. Dalam erti kata lain, anda perlu mencari detik apabila nilai yang disimpan berubah, dilambangkan dengan baris berbintang.

Penyelesaian:

Satu pendekatan untuk menyelesaikan masalah ini melibatkan memanfaatkan tetingkap fungsi dan nombor baris dalam pernyataan SQL:

  1. Perkenalkan Nombor Baris:

    WITH x AS (
        SELECT value, time, rn = ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Time)
        FROM dbo.table
    )
    Salin selepas log masuk

    Langkah ini memperkenalkan lajur baharu yang dipanggil rn (nombor baris) yang memberikan nombor jujukan unik kepada setiap baris dalam setiap partition Nilai, dalam tertib menaik Masa.

  2. Kenal pasti Perubahan:

    SELECT * FROM x WHERE rn = 1;
    Salin selepas log masuk

    Pertanyaan ini menapis hasil untuk hanya memasukkan baris dengan rn bersamaan dengan 1. Ini ialah baris pertama dalam setiap partition Nilai, yang mewakili permulaan perubahan nilai.

Pertimbangan Tambahan untuk Atas dan Bawah Nilai:

Jika lajur Nilai boleh meningkat dan menurun, pendekatan yang lebih kompleks diperlukan:

  1. Buat Jadual Sementara:

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

    Buat jadual sementara dengan data sampel untuk menggambarkan proses.

  2. Perkenalkan Nombor Baris (Sekali lagi):

    WITH x AS (
        SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time)
        FROM @x
    )
    Salin selepas log masuk
  3. Kenalpasti Perubahan Nilai:

    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

    Pertanyaan ini melakukan cantuman luar kiri antara jadual dengan nombor baris dan versi dianjak sendiri (y) untuk menyemak perubahan dalam lajur Nilai antara baris bersebelahan. Baris dengan nilai bukan NULL untuk nilai y mewakili perubahan.

Atas ialah kandungan terperinci Bagaimanakah SQL Boleh Mengenalpasti Perubahan dalam Nilai Lajur Dari Masa?. 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