sql - 如何查询实体的时间顺序?
问题描述
我想将实体的时间顺序存储在我的数据库中。
我的桌子看起来像这样:
_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 字段。
解决方案
使用lag()
:
select e.*,
lag(_id) over (order by start_time) as prev_id
from episode e;
我不建议将其存储在表中。保持更新以进行数据修改是相当复杂的。
推荐阅读
- node.js - 以编程方式在 macOS 上创建虚拟显示器
- swift - 使用符号特征从 *light* 字体创建斜体版本
- compiler-construction - 计算机时钟周期
- angular - Angular formControl 在进行验证时未显示 mat-error
- python - Python 脚本插入数据 MySQL Google Cloud
- mysql - 多个连接上的 SQL 太慢了
- javascript - 使用 JS 成功 POST 到数据库
- python - 函数不起作用:结果 = 缺少 1 个必需的位置参数:
- sql - 在 SQL Server Select Query 中将文本从一列解析为三列
- python - 如何为没有键的字典提取列