0

簡単な質問ですが、簡単な解決策が見つからないようです。

以下のデータを前提として、現在のステップ番号に基づいて前のステップと次のステップの両方で一意のHEXIDを取得する最も効率的な方法は何ですか。

---- + ------------- + ----------------
ID | UnqID | STEPNUM |
---- + ------------- + ----------------
21 | BcDeF | 1 |
22 | GhIjKL | 2 |
23 | MnOPq | 3 |
24 | RsTuV | 4 |
25 | wXyZa | 5 |
---- + ------------- + ----------------

例:
提供されたステップがであると仮定すると、と3の両方の一意のHEX IDを取得するにはどうすればよいですか?24

ありがとう!


編集
これは私が現在使用しているものですが、私にはそれほど効率的ではないようです??

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
4

1 に答える 1

2

クエリを変更しました。少しネストされていますが、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
于 2012-06-22T18:36:18.393 に答える