以下に、SQLクエリの非常に簡略化されたバージョンを貼り付けました。私が遭遇している問題は、ORDER BY
ステートメントが私のCTEの選択結果に影響を与えていることです。これがなぜであるかを理解できませんでした。私の当初の考えは、CTE内でいくつかのSELECT
ステートメントを実行し、その後、これらのORDER BY
結果で機能するはずであるというものでした。
残念ながら、私が見ている動作は、私の内部SELECT
ステートメントがによる順序の影響を受けており、にない「アイテム」を与えてしまうことですTOP 10
。
データの例を次に示します:(IDの逆順でインデックス付け)
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
....
9573 2010-08-10
....
8174 2010-08-05
....
38 2029-12-20
私の基本的な質問:
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
クエリは以下を返します:
ID, Date
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9594 2010-08-06
9593 2010-08-05
9592 2010-08-02
私のクエリORDER BY
;with results as(
select TOP 10 ID, Date
from dbo.items
)
SELECT ID
FROM results
ORDER BY Date DESC
クエリは以下を返します:
ID, Date
38 2029-12-20
9600 2010-10-12
9599 2010-09-08
9598 2010-08-31
9597 2010-08-31
9596 2010-08-30
9595 2010-08-11
9573 2010-08-10
9594 2010-08-06
8174 2010-08-05
最初のクエリがテーブルのトップ10にあるIDのみを返し、2番目のクエリがテーブル全体のトップ10を返す理由を誰かが説明できますか(並べ替えが適用された後)。