【问题标题】:SQL query to get the latest action/update on a specific objectSQL 查询以获取特定对象的最新操作/更新
【发布时间】: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,感谢您的建议,我终于弄明白了。非常感谢。
  • 我已将其添加为答案。如果你接受它,那么它将帮助未来的访问者解决这个问题:)

标签: sql presto


【解决方案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 加入该表。

【讨论】:

    猜你喜欢
    • 2016-10-15
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2016-05-09
    相关资源
    最近更新 更多