获取当前数据的上一条,下一条的 MySQL 代码:
WITH RankedRecords AS (
SELECT *,
LEAD(id) OVER (ORDER BY time ASC) AS next_id,
LAG(id) OVER (ORDER BY time ASC) AS prev_id
FROM records
)
SELECT r.id, r.time, -- 其他字段
CASE
WHEN r.id = @CurrentID THEN 'Current' -- @CurrentID 是当前id
WHEN r.prev_id = @CurrentID THEN 'Previous'
WHEN r.next_id = @CurrentID THEN 'Next'
END AS record_type
FROM RankedRecords r
WHERE r.id = @CurrentID OR r.prev_id = @CurrentID OR r.next_id = @CurrentID
ORDER BY CASE WHEN record_type = 'Previous' THEN 1 ELSE 2 END, r.time ASC;
代码是一言生成的,测试达到了效果,想问问数据库大佬,这段代码如果对大量数据的查询会影响性能吗,像这一行:
SELECT *,
LEAD(id) OVER (ORDER BY time ASC) AS next_id,
LAG(id) OVER (ORDER BY time ASC) AS prev_id
FROM records
数据库结构:
id | time | ···一些其他列 |
---|---|---|
2 | 12345660 | ··· |
3 | 12345640 | ··· |
5 | 12345670 | ··· |
查询id=2,以time排序:
id | time | ···一些其他列 | record_type |
---|---|---|---|
3 | 12345640 | ··· | Previuous |
5 | 12345670 | ··· | Next |
2 | 12345660 | ··· | Current |
查询id=3:
id | time | ···一些其他列 | record_type |
---|---|---|---|
2 | 12345660 | ··· | Next |
3 | 12345640 | ··· | Current |