SQL Server 返回字段更改的行

标签 sql sql-server record

我有一个包含 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/

相关文章:

mysql - 相当于 pandas 'transform' 的 SQL 是什么?

mysql - SQL 查询错误#1064,没有任何明显错误

sql-server - 动态 AX 2012 : Conversion failed when converting date and/or time from character string

node.js - 如何将参数传递给 Node js中的mssql查询

php - Laravel 只更新单行

android - 媒体记录器 setMaxFileSize 问题

ios - 在IOS中记录样本

sql - 列出所有不存在但在 View sql server 中使用的表

Mysql查询使用多对多关系连接两个表

sql - 合并以更新所有目标表列