更新:问题精炼,我仍然需要帮助!
我有以下表结构:
表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增量值。