更新:问题已经完善,我仍然需要帮助!
我有以下表结构:
表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
在报告表格中,插入report
但从未更新/编辑过。
我希望能够做到以下几点:
对于reports
表中的每个条目,我希望能够在创建report
时查询所有对象的状态,就像它们一样。 / p>
例如,让我们看一下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 增量值,我知道数据库表中的插入顺序。
答案 0 :(得分:0)
如果您正在处理对象的新版本,并且您的问题是time
列(我假设您使用此列来排序哪个更新);我建议您为版本使用auto-incremental ID
列。最终,即使time
值对您来说不可靠,ID
也将是。因为它总是在增加。如此高的ID,更新的版本。