我需要找到一种替代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检索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) |
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!