我想跟踪系统设置的变化,并在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)是否在同一系统的设置之间发生变化,并创建一个表格,我保留结果,并从每次加载列表时显示它们设置。
例如,如果我比较系统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
答案 0 :(得分:2)
如果您使用的是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;