fau*_*ong 4 sql t-sql sql-server
我有一张表格,FieldID, ChangeField, OldValue, NewValue and ChangeDate如下所示:
FieldID ChangeField OldValue NewValue ChangeDate
1 interest 1.5 1.2 2018-05-01 13:00:00
1 interest 1.2 1.3 2018-05-01 14:00:00
1 quantity 2 1 2018-05-01 15:00:00
1 quantity 1 2 2018-05-01 16:00:00
1 quantity 2 3 2018-05-01 17:00:00
2 quantity 10 20 2018-05-01 18:00:00
2 quantity 20 30 2018-05-01 19:00:00
Run Code Online (Sandbox Code Playgroud)
是否可以获取每个 FieldID 的每个 ChangeField 的第一个和最后一个更改,例如下面的结果?
FieldID ChangeField OldValue NewValue dtChangeDate
1 interest 1.5 1.3 2018-05-01 14:00:00
--> The original value for interest was 1.5, the last value for interest is 1.3
1 quantity 2 3 2018-05-01 17:00:00
--> The original value for quantity was 2, the last value for interest is 3
2 quantity 10 30 2018-05-01 19:00:00
--> The original value for quantity was 10, the last value for interest is 30
Run Code Online (Sandbox Code Playgroud)
请注意,ChangeDate 始终是最新的 ChangeDate
您可以尝试以下代码,我已用于FIRST_VALUE()获取 OldValue 列中的第一个值以及LAST_VALUE()获取 NewValue 和 dtChangeDate 组的最后一个值。
SELECT
FieldID,
ChangeField,
FIRST_VALUE(OldValue) OVER (PARTITION BY
fieldID, ChangeField
ORDER BY FieldID
) AS OldValue,
LAST_VALUE(NewValue) OVER (PARTITION BY
fieldID, ChangeField
ORDER BY FieldID
) AS NewValue,
LAST_VALUE(ChangeDate) OVER (PARTITION BY
fieldID, ChangeField
ORDER BY FieldID
) AS dtChangeDate
FROM YourTable;
Run Code Online (Sandbox Code Playgroud)