ホームページ > データベース > mysql チュートリアル > 列の値が変更された SQL 行を特定する方法

列の値が変更された SQL 行を特定する方法

Patricia Arquette
リリース: 2024-12-26 20:43:10
オリジナル
212 人が閲覧しました

How to Identify SQL Rows Where Column Values Have Changed?

SQL を使用して列値が変更された行をクエリする

テーブル内で列値が変更されたインスタンスを特定するにはどうすればよいでしょうか?このクエリを使用すると、特定の列の値が変更された行を識別できます。

例として、次の表を考えてみます。

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     
ログイン後にコピー

目的は、アスタリスクの付いた行を選択することです。値が変化することを示します。これは、これらの変更に関連する時間間隔を決定するために重要であり、他のデータベース クエリに利用できます。

解決策:

ウィンドウ関数と SQL クエリを実装します。行番号から、必要な行番号を導き出します。行:

;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;
ログイン後にコピー

説明:

  1. ROW_NUMBER() 関数は、Value 列に基づいて各パーティション内の連続した行番号を割り当て、それによってグループを作成します。
  2. 後続の WHERE rn = 1 条件は、各グループ内の最初の行のみを選択します。それぞれの個別の値の最初の出現を表します。

追加の考慮事項:

  • 値を増加させる場合のみ、解決策はより簡単になります:
SELECT * FROM table WHERE value <> LAG(value) OVER (ORDER BY time);
ログイン後にコピー
  • 値が上下に変動する場合、わずかに遅くなりますアプローチが必要です:
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;
ログイン後にコピー

SQL のウィンドウ関数の機能を活用することで、このクエリは列の値が変更された行を効果的に取得し、データの変動に関する貴重な洞察を提供します。

以上が列の値が変更された SQL 行を特定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート