我想监视重要列的更改(重要),并仅显示有更改的行。对于每个文档,每个更改都记录有序列更改ID(例如,文档#1在非重要列中更改#1,在非重要列中更改#2,在IMPORTANT列中更改#3) - 我想在输出DocNum#1,changeID#3,'Column Changed'。
我正在尝试捕获每个文档(DocNum)的最后一个更改实例的重要列中的更改 - 并且仅显示更改位于重要列中的行。
我想过这样的事情,但这不起作用:(
SELECT
DocNum,
changeID,
'Important' AS 'Column Changed'
FROM (
SELECT
DISTINCT changeID,
DocNum,
Important
FROM ADOC
) AS DifferenceInImportant
WHERE
changeID IN (
SELECT
TOP(1) TT0.changeID
FROM
ADOC TT0
WHERE
TT0.DocNum=DocNum
ORDER BY TT0.changeID DESC
)
GROUP BY changeID, DocNum
HAVING COUNT(*) > 1
示例:输入数据(没有空行,只是为了良好的方向)
DocNum changeID DueDate
000001 00000001 0101-18
000001 00000002 0201-18
000001 00000003 0201-18
000001 00000004 0301-18
000002 00000001 0201-18
000002 00000002 0201-18
000003 00000001 0101-18
000003 00000002 0201-18
000004 00000001 0301-18
000004 00000002 0401-18
000004 00000003 0401-18
预期结果(只有那些行,最后一次更改 - 具有最后更改ID的条目 - 在DueDate中)
DocNum changeID DueDate
000001 00000004 'Changed Column'
000003 00000002 'Changed Column'
答案 0 :(得分:0)
我会使用ANSI标准lag()
函数执行此操作。假设important
不包含NULL
值:
select a.*
from (select a.*,
lag(important) over (partition by docnum order by changeid) as prev_important
from ADOC a
) a
where prev_important is null or prev_important <> important;
可以对其进行修改以处理NULL
值,但这可以解决这个问题。