【问题标题】:How to get updated record in last 3 hours in sql如何在sql中获取最近3小时的更新记录
【发布时间】:2015-07-07 05:58:32
【问题描述】:

我有一张桌子Employee。有人在过去 3 小时内更新了一些记录。我想获得那些已更新的记录。 如果可能的话,我想要sql 中先前记录和当前记录之间的差异。 我想要一个作为查询的答案。

【问题讨论】:

  • 你的表结构是什么?如果你存储CreatedDate / UpdatedDate之类的东西,你可以使用Tim Schmelter提供的解决方案
  • 如果您没有适当的审核,您将无法获得以前的值。 sql server 没有针对行的本机版本控制。

标签: c# sql sql-server asp.net-mvc sql-server-2008


【解决方案1】:

使用DATEDIFF:

SELECT e.*
FROM Employee e
WHERE DATEDIFF(HOUR, e.UpdatedAt, GETDATE()) <= 3

【讨论】:

  • 您正在考虑 Employee 中的 UpdatedAt 列。但我没有任何保持更新时间的专栏。我正在考虑从 sql server 内部时间戳中获取它。
  • @HemantMalpote:那么你需要添加一个。引用this: " 记录的磁盘结构或为此的页面,不包含对上次更新时间的任何引用......记录中没有此类信息/row 级别。” 考虑到 SQL-Server 是用来存储数十亿条记录的,为什么要存储可能从未使用过的信息?
【解决方案2】:

如果表中有任何数据类型为 Row 版本的列,则时间戳值将自动添加到表中的每一行。每次对特定行执行任何操作时都会修改此列值。行版本是行的时间戳值。如果我们更新行中的任何值,行的时间戳值将自动更新桌子。新的 TIMESTAMP 值始终是表中所有行中存在的最大 TIMESTAMP 值的下一个递增值。要获取最后更新的值,只需查询最新的 3 行版本列

CREATE TABLE Employee(EmployeeID int PRIMARY KEY, VerCol rowversion) ;

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多