Android SQLite中超前和滞后的替代方案
我需要找到一个替代LAG和LEAD的方法,以便在SQLite中查找表中的上一个和下一个条目,因为所使用的版本不支持这些条目(更新不是选项)。Android SQLite中超前和滞后的替代方案,android,sql,sqlite,Android,Sql,Sqlite,我需要找到一个替代LAG和LEAD的方法,以便在SQLite中查找表中的上一个和下一个条目,因为所使用的版本不支持这些条目(更新不是选项)。 但我也不能使用我订购的值,因为它可以是一个日期,因此在多个条目上可以相同。 由于表必须按日期排序,因此也不能使用ID 如果有人知道处理这个问题的另一种方法,那就太好了,因为经过一个多小时的搜索和尝试,我已经没有主意了 编辑: 我的用例的重要列有: _id booking_date 1 2017:11-21 3 201
但我也不能使用我订购的值,因为它可以是一个日期,因此在多个条目上可以相同。
由于表必须按日期排序,因此也不能使用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排序(请参见give n示例中的id 2、6和7) 我需要一种方法,通过条目id在条目前后查询条目 例如,对于_id=6,我需要一个选择_id=2的行的查询和一个选择_id=7的行的查询。
或者,选择两者的单个查询也同样有效
我不需要您提供完整的查询,而是提供解决此问题的方法。尝试类似的方法,这将使用您的排序顺序(按日期+id)检索给定记录的上一个和下一个id-假设
id
是主键,您可以使用这些id检索上一个记录的其他列:
SELECT *,
(SELECT id FROM t t1
WHERE t1.booking_date < t.booking_date
OR t1.booking_date = t.booking_date AND t1.id < t.id
ORDER BY booking_date DESC, ID DESC LIMIT 1 ) prev_id,
(SELECT id FROM t t1
WHERE t1.booking_date > t.booking_date
OR t1.booking_date = t.booking_date AND t1.id > t.id
ORDER BY booking_date , ID LIMIT 1 ) next_id
FROM t
order by booking_date, id
如果表是这样的,那么最终的选择就相当简单了
_id booking_date seq
1 2017:11-21 1
3 2017:11-21 2
4 2017:11-21 3
5 2017:11-21 4
2 2017:11-22 1
6 2017:11-22 2
7 2017:11-22 3
seq
是同一预订日期中id较小的行数。您可以使用此结构创建虚拟视图以驱动主选择
这是一种可能的方法。既然你没有要求“一个完整的查询”,我就把如何实现这个想法留给你了 请提供样本数据和预期结果。为了使用
lead()
/lag()
,您的表仍然需要一个稳定的顺序。什么键提供了稳定的排序?我希望提供的进一步信息和示例有用。SQL表表示无序集。您甚至没有使用\u id
进行订购,因此您所提供的数据无法回答您的问题。在实际表格中,\u id当然是用于订购的。但这张桌子代表预订。每个预订都有一个id、一个表示该预订执行时间的日期[而不是创建时间]以及与预订相关的所有值,这些对于此任务来说并不重要。当显示预订列表时,按日期而不是按id对预订进行排序是有意义的。但是为了只查询以前的预订,不能只使用日期,因为每个日期可以有多个预订。但事实上有一个解决办法,你显然没有想到。但既然不是这样,这个答案一点帮助都没有,是吗?@Jujinko你欠我一票。请注意最后一行,您可以使用此结构创建虚拟视图以驱动主选择代码>。换句话说,创建一个看起来像这样的结构。事实上,我确实创建了一个复制,但OP想要的是“方法”,而不是“整个查询”。谢谢你解释否决票,给我机会反驳和澄清我的答案。聪明的答案和方法没有滞后。谢谢
_id booking_date seq
1 2017:11-21 1
3 2017:11-21 2
4 2017:11-21 3
5 2017:11-21 4
2 2017:11-22 1
6 2017:11-22 2
7 2017:11-22 3