Android SQLite中超前和滞后的替代方案

Android SQLite中超前和滞后的替代方案,android,sql,sqlite,Android,Sql,Sqlite,我需要找到一个替代LAG和LEAD的方法,以便在SQLite中查找表中的上一个和下一个条目,因为所使用的版本不支持这些条目(更新不是选项)。 但我也不能使用我订购的值,因为它可以是一个日期,因此在多个条目上可以相同。 由于表必须按日期排序,因此也不能使用ID 如果有人知道处理这个问题的另一种方法,那就太好了,因为经过一个多小时的搜索和尝试,我已经没有主意了 编辑: 我的用例的重要列有: _id booking_date 1 2017:11-21 3 201

我需要找到一个替代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排序(请参见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