SQL 查询以获取特定对象的最新操作/更新

Posted

技术标签:

【中文标题】SQL 查询以获取特定对象的最新操作/更新【英文标题】:SQL query to get the latest action/update on a specific object 【发布时间】:2022-01-07 03:26:47 【问题描述】:

我有一个包含项目审计历史的表,一个人所做的每一次修改都会在数据库中创建一个数据事件/行,并且该表将存储从项目第一次被编辑到的每一个修改最晚时间。如果一个项目被修改了 5 次,它将有 5 行数据,例如日期时间、项目名称、项目 ID、编辑者……

现在,我只需要提取该项目的一个且仅是最新的修改。我尝试使用按降序排列更新时间的子表,但是当我将它们连接在一起时,它们会显示从第一次到最新对该项目的每一次修改。

请谁能帮我提取确切的最新动作/修改?非常感谢。

【问题讨论】:

你试过什么?在 SQL Server 中,我们通常会使用 ROW_NUMBER() 函数。伪代码类似于ROWNUMBER() OVER (PARTITION BY ItemID, ORDER BY EditDate DESC) AS rn。这可以在临时表或公用表表达式中使用,并将添加一个按 EditDate 以降序排列的 rn 列(意味着最新的将得到 rn = 1,之前的那个 rn = 2,等等)每个 ItemId(以及其他列)可以在复合键的情况下添加)。然后,您可以对该临时表 WHERE rn = 1 进行选择,并根据 ItemID 和 EditDate 加入该表。 非常感谢 SchmitzIT,感谢您的建议,我终于弄明白了。非常感谢。 我已将其添加为答案。如果你接受它,那么它将帮助未来的访问者解决这个问题:) 【参考方案1】:

在 SQL Server 中,我们通常会使用 ROW_NUMBER() 函数。伪代码类似于:

ROWNUMBER() OVER (PARTITION BY ItemID, ORDER BY EditDate DESC) AS rn

这可以在临时表或公用表表达式中使用,并将添加一个按 EditDate 降序排列的 rn 列(意味着最新的将得到 rn = 1,之前的一个 rn = 2,等等)每个 ItemId (并且可以在复合键的情况下添加其他列)。然后,您可以对该临时表 WHERE rn = 1 进行选择,并根据 ItemID 和 EditDate 加入该表。

【讨论】:

以上是关于SQL 查询以获取特定对象的最新操作/更新的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询获取特定日期和列中最新日期之间的数据

sql中获取到两条数据,怎么获取最新的

SQL查询以逐块获取最新数据

SQL 查询以获取该用户的最新记录

SQL 查询以获取每个位置的“最新”值

查找 sql 查询以获取每个分组的最新关联日期