我想跟踪系统设置的更改,并在Web应用程序ASP.net VB中显示它们。设置信息/数据存储在这样的表中:
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 Server 2012
如果您使用的是SQL Server 2012或更高版本,则可以使用LAG
来查找先前的值,并仅使用aCASE
来确定旧值和新值是否不同;否则,请使用。
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] 删除。
我来说两句