【发布时间】: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,感谢您的建议,我终于弄明白了。非常感谢。
-
我已将其添加为答案。如果你接受它,那么它将帮助未来的访问者解决这个问题:)