mysql - 根据当前步骤编号获取上一步和下一步的唯一ID

标签 mysql sql

简单的问题,但我似乎找不到简单的解决方案:

在给定以下数据的情况下,根据当前步骤编号获取上一步和下一步唯一十六进制 ID 的最有效方法是什么:

----+-------------+----------------
身份证 | UnqID   |步数 |
----+-------------+----------------
21 | 21 BcDeF|   | 1        |
22 | 22 GhIjKL|   | 2        |
23 | 23 MnOPq| 3        |
24 | 24 RsTuV | | 4        |
25 | 25 wXyZa   | 5        |
----+-------------+----------------

例如:
假设提供的步骤是3,我如何获得两个2的唯一十六进制ID > 和4

谢谢!

<小时/>

编辑
这就是我目前正在使用的,但对我来说似乎没有那么有效?

SELECT
    nxt.stepnum AS NextStep,
    nxt.unqID AS NextUnqID,
    prv.stepnum AS PrevStep,
    prv.unqID AS PrevUnqID
FROM foo w,
(
 SELECT stepnum, unqID FROM foo WHERE stepnum > 3 ORDER BY stepnum LIMIT 1
) AS nxt
,
(
 SELECT stepnum, unqID FROM foo WHERE stepnum < 3 AND ORDER BY stepnum DESC LIMIT 1
) AS prv
WHERE w.stepnum = 3

最佳答案

我修改了您的查询。虽然它有点嵌套,但它应该由 SQL 引擎的非常简单的索引查找组成(理论上......)

SELECT
    nxt.stepnum AS NextStep,
    nxt.unqID   AS NextUnqID,
    prv.stepnum AS PrevStep,
    prv.unqID   AS PrevUnqID

FROM (SELECT NULL) AS dummy -- dummy table to LEFT JOIN to

LEFT JOIN
( SELECT stepnum, unqID FROM foo
  WHERE stepnum = (SELECT MIN(stepnum)
                   FROM foo
                   WHERE stepnum > 5 )
) AS nxt ON true

LEFT JOIN
( SELECT stepnum, unqID FROM foo
  WHERE stepnum = (SELECT MAX(stepnum)
                   FROM foo
                   WHERE stepnum < 5 )
) AS prv ON true

关于mysql - 根据当前步骤编号获取上一步和下一步的唯一ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161875/

相关文章:

mysql - 在MySQL中按子查询的结果排序

MySQL:更新查询中基于SUM的计算

sql - 删除不必要的索引 - 对 SQL Server 2005 中的查询计划的影响

mysql - 群组功能有问题

mysql - 寻找最小距离MYSQL

php - 允许创建自定义表单并存储数据

PHP 查询在使用两个 WHERE 子句限制查询时显示没有日期的行

php - 单个sql查询多个表

sql - 如何只查询sql日期的dd/MM部分

sql - 不用聚合函数求最大值