【发布时间】:2020-05-14 13:19:23
【问题描述】:
我想在我的数据库中存储实体的时间顺序。
我的桌子看起来像这样:
_id name start_time
0 Ababab 01.04.2020
1 Bababa 02.03.2020
2 Cababa 09.04.2020
我想按 start_time 对实体进行排序,并记住之前按时间顺序发生的实体。像这样:
_id name start_time chronologically_previous
1 Bababa 02.03.2020 -
0 Ababab 01.04.2020 1
2 Cababa 09.04.2020 0
应该可以添加任意新实体,并且 chronologically_previous 应该相应地更新。
到目前为止,我已经尝试过可怕的 SQL 查询......
@Query("UPDATE episode SET previous_cycle_id =
(SELECT LEAD(_id) OVER (ORDER BY start_date ASC) FROM episode)")
没用。
难道它不应该是一个更简单的解决方案吗?也许将订单保存在数组中,在另一个对象中,在另一个数据库中,我不知道..
我对 Kotlin 和房间以及所有东西都很陌生,所以我很欣赏优雅解决方案的想法!
编辑:
实际上,我最感兴趣的是一个实体与前一个实体之间的时间差。我也对平均时差感兴趣。
我的应用程序都需要这些时间间隔值。因此,我想以某种方式存储它们,以便我一直避免大量的数据库操作。
解决方案:当我添加一个新实体时,我将 time_gap 字段留空(null)。然后,在下一次运行中,我查询实体的排序列表。在这个列表中,我找到了最近添加的项目的索引。我用列表中“前一个邻居”(索引 - 1)的值更新 time_gap 字段。如果最近的元素不是列表中的最后一个,我也会更新“下一个邻居”(索引 + 1)的 time_gap 字段。
【问题讨论】:
标签: sql sqlite android-room