システム設定の変更を追跡し、それらをWebアプリケーションASP.netVBに表示したいと思います。セットアップ情報/データは次のようなテーブルに保存されます。
TABLE 1
| SNR | LENSE | CAMERA | SYS |
|-----|-------|--------|-----|
| 1 | 55mm | rcd30 | 5 | (initial setup sys 5)
| 2 | 80mm | ph1 | 4 | (initial setup sys 4)
| 3 | 80mm | ph1 | 4 | (new setup sys 4)
| 4 | 55mm | ph1 | 5 | (new setup sys 5)
| 5 | 80mm | rcd30 | 5 | (new setup sys 5)
私が欲しいのは、同じシステムのセットアップ間でどの変更が発生したかを両方のシステム(4と5)で比較し、結果を保持するテーブルを作成し、ここからセットアップのリストをロードするたびに結果を表示することです。
たとえば、sys nr 5のセットアップを比較すると、行1と4を比較すると、カメラに違いがあります。4から5の間で、カメラとレンズの両方が変化します。これは、各システムの最初のレコードを初期設定と見なす場合に機能します。
CHANGES
| SNR | LENSE | CAMERA | SYS |
|-----|-------|--------|-----|
| 1 | n | n | 5 | (initial setup sys 5)
| 2 | n | n | 4 | (initial setup sys 4)
| 3 | n | n | 4 | (new setup sys 4)
| 4 | n | y | 5 | (new setup sys 5)
| 5 | y | y | 5 | (new setup sys 5)
SQLを使用してこれを行うことは可能ですか?どのようにアイデアはありますか?SQLは私の最強のポイントではありませんでした:(
編集:SQL Server2012を使用
SQL Server 2012以降を使用LAG
している場合は、を使用して以前の値を検索しCASE
、古い値と新しい値が異なるかどうかにのみを使用できます。
WITH cte AS (
SELECT snr, sys,
lense, LAG(lense) OVER (PARTITION BY sys ORDER BY snr) old_lense,
camera, LAG(camera) OVER (PARTITION BY sys ORDER BY snr) old_camera
FROM table1
)
SELECT snr, sys,
CASE WHEN lense <> old_lense THEN 'y' ELSE 'n' END lense,
CASE WHEN camera <> old_camera THEN 'y' ELSE 'n' END camera
FROM cte
ORDER BY snr;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加