【发布时间】:2018-12-05 10:48:02
【问题描述】:
我需要找到 LAG 和 LEAD 的替代方法,以便在我的 SQLite 表中查找上一个和下一个条目,因为使用的版本不支持这些条目(不支持更新)。
但我也不能使用我订购的值,因为它可以是一个日期,因此在多个条目上可以是相同的。
由于表格必须按日期排序,因此也不能使用 ID。
如果有人知道解决此问题的另一种方法,那就太好了,因为经过一个多小时的搜索和尝试,我已经没有想法了。
编辑:
我的用例的重要列是:
_id booking_date
1 2017:11-21
3 2017:11-21
4 2017:11-21
5 2017:11-21
2 2017:11-22
6 2017:11-22
7 2017:11-22
...
_id 是主键。
预订需要按日期排序。
多个预订可能具有相同的日期。
相同日期的预订按其 id 排序(请参见示例中的 id 2、6 和 7)
我需要一种方法来通过其 id 查询条目之前和之后的条目。
例如,对于 _id=6,我需要一个选择 _id=2 行的查询和一个选择 _id=7 行的查询。
或者,同时选择两者的单个查询也可以正常工作。
我不需要您提供完整的查询,而是提供解决此问题的方法。
【问题讨论】:
-
请提供样本数据和期望的结果。为了使用
lead()/lag(),您的桌子无论如何都需要稳定的排序。哪些键提供稳定的排序? -
我希望提供的进一步信息和示例有用。
-
。 . . SQL 表代表 无序 集。您甚至没有使用
_id进行订购,因此您提供的数据无法回答您的问题。 -
在实际表中,_id 当然是用于订购的。但该表代表预订。每个预订都有一个 id、一个表示该预订执行时间的日期 [不是创建时间] 以及与该预订相关的所有值,这对于此任务并不重要。在显示预订列表时,按日期而不是按 ID 对预订进行排序是有意义的。但是为了只查询以前的预订,不能只使用日期,因为每个日期可以有多个预订。但实际上有一个解决方案,你显然没有想到。