WHERE句のあるLag()関数

ライオンタス:

私は正しく動作するこのSQL関数を持っています:

SELECT out_hum ,
 (out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table

ただし、差(dif)が0に等しいか、値より大きい場合は、すべてのout_humを選択します。このコードを入力すると、エラーが発生します...

SELECT out_hum ,
 (out_hum - LAG(out_hum, 1) OVER (ORDER BY id)) As dif
FROM excel_table  WHERE dif=0

どうすればこれを解決できますか?

GMB:

where句できないで定義された式へのアクセスエイリアスselect句(ので、基本的に、前者が処理される前に後者)。その上、ウィンドウ関数には特別な制限がwhereあり、クエリ句では使用できません(それらはselectan order by句でのみ許可されます)。

典型的な解決策は、サブクエリなどの派生テーブルを使用することです。

select *
from (
    select out_hum, out_hum - lag(out_hum) over (order by id) as dif
    from excel_table
) t
where dif = 0

ノート:

  • 減算の前後の括弧は必要ありません

  • 1の2番目の引数のデフォルト値lag()なので、指定する必要はありません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ