0

更新:问题精炼,我仍然需要帮助!

我有以下表结构:

reports

ID |       time | title | (extra columns)
 1 | 1364762762 |   xxx | ...

object具有以下结构的多个表

ID | objectID |       time | title | (extra columns)
 1 |        1 | 1222222222 | ...   | ...
 2 |        2 | 1333333333 | ...   | ...
 3 |        3 | 1444444444 | ...   | ...
 4 |        1 | 1555555555 | ...   | ...

在对象表中,在对象更新时插入具有相同 objectID 的新版本,以便旧版本仍然可用。例如,查看条目objectID = 1

在报告表中,areport被插入但从未更新/编辑。

我想要做的是以下几点:

对于表中的每个条目reports,我希望能够查询所有对象的状态,就像它们在report创建时一样。

例如,让我们看一下上面 ID 为 1 的示例报告。在创建它时(请参阅time列),objectID 1 的当前版本是 ID 为 1 的条目(当时不存在条目 ID 4)。ObjectID 2 也存在于它的当前版本中,条目 ID 为 2。

我不确定如何实现这一目标。

我可以使用按时间列选择对象版本的查询:

SELECT *
FROM (
    SELECT *
    FROM   objects
    WHERE  time < [reportTime]
    ORDER BY time DESC
)
GROUP BY objectID

让我们不谈论这个查询的性能,只是为了明确我想要做什么。我的问题是时间列的比较。我认为这不是确保我获得正确的对象版本的好方法,因为系统时间可能会“出于任何原因”更改,并且时间列中会包含错误的数据,这会导致错误的结果。

这样做的另一种方法是什么?我考虑过不为此使用时间列,而是使用我知道跨数据库表的插入顺序的GLOBAL增量值。

4

1 回答 1

0

如果您正在插入对象的新版本,而您的问题是time列(我假设您正在使用此列来对哪个新版本进行排序);我建议您auto-incremental ID为版本使用一列。最终,即使该time值对您来说不可靠,ID它也会。因为它总是在增加。所以更高的ID,更新的版本。

于 2013-03-31T17:43:41.200 回答