gpt4 book ai didi

sql - 有效查看带有最新修订标记的记录

转载 作者:行者123 更新时间:2023-12-05 00:15:59 24 4
gpt4 key购买 nike

我有一个表,称它为 P,它当前有一系列记录,每个记录都有一个唯一的键:

Key1 value1
Key2 value2
Key3 value3

等等,其中每个值实际上是一组列。

我现在有一个要求,使这些记录可变,并将更改历史记录为审计日志。

我认为最好的方法是修改 P 使其成为

Key1 Rev1 value1
Key1 Rev2 value1a
Key2 Rev1 value2
Key2 Rev2 value2a

等等。任何给定键的最新记录始终具有最高修订标记。

问题是,这破坏了只需要当前记录的查询的可比性。我正在考虑将 P 重命名为 PComplete 并创建一个 View P ,它只会为每个键选择最高修订标记,并省略修订标记,从而模拟原始表 P

因为我主要不是 SQL 专家:

这是一项可靠的技术吗?设计新 View P 以便它为基本 View PBase 中的每个当前键选择最新(称之为最大)行的最佳方法是什么?

网站指针是最受欢迎的;我不知道用什么术语可以通过 Google 找到此类解决方案的最佳实践方法。

注意:这是 Microsoft SQL Server 2008 R2。

最佳答案

您的问题的第一部分很简单:使用这样的修订列几乎是行业标准,至少在我工作的地方是这样。

至于查看最新记录,不幸的是,没有语法优美的方法来做到这一点(这很奇怪,因为它一直出现,请参阅 !)。但是如果你有一个基础记录表:

CREATE TABLE Records (
RecordID int,
RevisionID int,
ValueA varchar(50),
...
)

如您所说,仅显示最新修订版(以及我个人的方式)的一种方法是通过 View :

CREATE VIEW CurrentRecords AS
SELECT r.RecordID,
r.ValueA
...
FROM Records AS r
INNER JOIN (
SELECT RecordID, MAX(RevisionID) AS RevisionID
FROM Records
GROUP BY RecordID
) AS maxRev on maxRev.RecordID = r.RecordID AND maxRev.RevisionID = r.RevisionID

您首先通过记录 ID 查找最新修订的修订 ID,然后使用该链接实际获取记录。只要 RevisionID 列上有索引,就不会有性能问题(这将是一个快速索引查找,而不是表扫描,以确定最大修订 ID)。

谷歌搜索“sql select row with max value”会出现一堆 S-O 链接,这个链接与我在这里写的内容大体一致:SQL Select only rows with Max Value on a Column。如果您想了解更多信息,请随意浏览我提供的标记部分、S-O 帖子和谷歌查询!

关于sql - 有效查看带有最新修订标记的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19411837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com