我有2個相同的源表,但只有不同的值。兩個表都沒有任何主鍵。通過比較2個相同的表選擇最新記錄
我想獲得最新的記錄了基於這些條件的2個表:
- 應該比較兩者的Test1和Test2的,並基於最新的掃描日期和BIOSID它應該返回的值。
- 如果BiosID爲空,它應該檢查最新的掃描日期和SerialNumber。
- 如果BiosID和SerialNumber都爲空,它應該檢查主機名。
測試1:
MachineID | Scandate | Account | BiosID | Serial number | Hostname |
1000 | 10-01-2016 | A | Abcd1111 | null | null |
1001 | 11-01-2016 | B | null | 7890 | XYZ |
1002 | 12-02-2016 | C | null | null | PQR |
1003 | 13-01-2016 | D | null | null | DEF |
的Test2:
MachineID | Scandate | Account | BiosID | Serial number | Hostname |
1000 | 10-02-2016 | W | Abcd1111| 1234 | ABC |
1001 | 11-02-2016 | X | null | 7890 | null |
1002 | 12-01-2016 | Y | null | null | null |
1003 | 13-02-2016 | Z | null | null| DEF |
結果表應該是 Test3的:
結果:
MachineID | Scandate | Account | BiosID | Serial number | Hostname |
1000 | 10-02-2016 | W | Abcd1111 | 1234 | ABC |
1001 | 11-02-2016 | X | Null | 7890 | null |
1002 | 12-02-2016 | C | null | null | PQR |
1003 | 13-02-2016 | Z | null | null | DEF |
以前,我只寫了一個代碼來檢查最新的掃描和BiosID。
查詢:
WITH Combined As(
SELECT MachineID,LastHWScan,Account,BiosID,SerialNumber,HostName
FROM TEST1
UNION
SELECT MachineID,LastHWScan,Account,BiosID,SerialNumber,HostName
FROM TEST2
)
, Ordered AS(
SELECT MachineID,LastHWScan,Account,BiosID,SerialNumber,HostName,
ROW_NUMBER() OVER(PARTITION BY BiosID ORDER BY LastHWScan DESC) AS rn
FROM Combined
)
INSERT INTO TEST3(MachineID,LastHWScan,Account,BiosID,SerialNumber,HostName)
SELECT MachineID,LastHWScan,Account,BiosID,SerialNumber,HostName FROM Ordered
WHERE rn=1
但如果BIOSID是空的,我不能得到所要求的結果。 所以任何人都可以幫我嗎? 在此先感謝。
你可能已經改變了分配問題的格式! – FallAndLearn