我有一个包含 3 个值的表。
ID AuditDateTime UpdateType
12 12-15-2015 18:09 1
45 12-04-2015 17:41 0
75 12-21-2015 04:26 0
12 12-17-2015 07:43 0
35 12-01-2015 05:36 1
45 12-15-2015 04:35 0
我试图仅返回 UpdateType
已根据 ID 从 AuditDateTime
更改的记录。因此,在此示例中,ID 12 从 12-15 条目更改为 12-17 条目。我希望返回该记录。 ID 12 将有多个实例,我需要返回所有记录,其中 ID 的 UpdateType
已从其先前的条目更改。我尝试添加一个 row_number
但它没有按顺序插入,因为记录在表中的顺序不正确。我做了很多搜索但没有运气。任何帮助将不胜感激。
最佳答案
通过使用 CTE,可以根据 AuditDateTime 的顺序找到以前的记录
WITH CTEData AS
(SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY AuditDateTime) [ROWNUM], *
FROM @tmpTable)
SELECT A.ID, A.AuditDateTime, A.UpdateType
FROM CTEData A INNER JOIN CTEData B
ON (A.ROWNUM - 1) = B.ROWNUM AND
A.ID = B.ID
WHERE A.UpdateType <> B.UpdateType
回到 CTE 的内部连接将在一个查询中同时给出当前记录(表别名 A)和上一行(表别名 B)。
关于SQL Server 返回字段更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34513514/