sql >> データベース >  >> RDS >> Sqlserver

where句にウィンドウ関数がないのはなぜですか?

    SQL Serverのwhere句でウィンドウ関数を使用できないのはなぜですか?

    1つの答えは、特に有益ではありませんが、仕様にはできないと書かれているためです。

    Itzik Ben Ganによる記事-論理クエリ処理:それが何であり、それがあなたにとって何を意味するか、特にここの画像を参照してください。ウィンドウ関数は、SELECTの時点で評価されます。 すべてのWHEREの後に残っている結果セットについて / JOIN / GROUP BY / HAVING 条項が処理されました(ステップ5.1)。

    本当に、where句でウィンドウ関数を使用できない理由を探しています。

    WHEREで許可されていない理由 条項は、あいまいさを生み出すということです。ウィンドウ関数を使用して高性能T-SQLからItzikBenGanの例を盗む(p.25)

    テーブルが

    だったとしましょう
    CREATE TABLE T1
    (
    col1 CHAR(1) PRIMARY KEY
    )
    
    INSERT INTO T1 VALUES('A'),('B'),('C'),('D'),('E'),('F')
    

    そしてあなたの質問

    SELECT col1
    FROM T1
    WHERE ROW_NUMBER() OVER (ORDER BY col1) <= 3
    AND col1 > 'B'
    

    正しい結果は何でしょうか? col1 > 'B'を期待しますか 述語は行番号付けの前または後に実行されましたか?



    1. sys.trigger_event_typesを使用して、SQLServerのトリガーイベントタイプを一覧表示します

    2. ruby-oci8をインストールするにはどうすればいいですか?

    3. wf_java_deferredキューを再構築する方法

    4. SQLServerのSelectQueryの列エイリアスを理解する-SQLServer/TSQLチュートリアルパート115