android - SQLite 中 LEAD 和 LAG 的替代方案
问题描述
我需要找到 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 行的查询。
或者,选择两者的查询单个查询也同样有效。
我不需要您提供完整的查询,而是提供解决此问题的方法。
解决方案
尝试类似的方法,这会使用您的排序顺序(按日期 + id)检索给定记录的上一个和下一个 id - 假设这id
是主键,您可以使用这些 id 检索其他列和 prev-next 记录:
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
演示:http ://www.sqlfiddle.com/#!5/17631/2
| id | booking_date | prev_id | next_id |
|----|--------------|---------|---------|
| 1 | 2017-11-21 | (null) | 3 |
| 3 | 2017-11-21 | 1 | 4 |
| 4 | 2017-11-21 | 3 | 5 |
| 5 | 2017-11-21 | 4 | 2 |
| 2 | 2017-11-22 | 5 | 6 |
| 6 | 2017-11-22 | 2 | 7 |
| 7 | 2017-11-22 | 6 | (null) |
推荐阅读
- c++ - 为什么程序会错过“if”运算符?
- elasticsearch - 弹性搜索标记字符
- javascript - 按月对对象数组进行排序
- php - 在 prestashop 1.6 中发送之前如何获取电子邮件内容
- python - IPython`显示`到字符串
- excel - 在 VBA 中删除/删除 Powerpoint 幻灯片标签
- c++ - 如何 push_back 到带有 getter 函数的列表?
- bash - 将具有扩展名的文件从目录的子目录移动到与另一个目录具有相同名称的另一个子目录
- reactjs - 在电视上的 TizenBrowser v1.1.2.07 上运行反应网站时出现问题
- angular - Angular 4 datepicker 0 到 1 自动选择