質問するログイン新規登録

Q&A

解決済

1回答

235閲覧

SQLServerで名前付きのウインドウ構文を使用するとエラーになる

AKI_TADA

総合スコア9

0グッド

0クリップ

投稿2024/08/09 03:02

0

0

実現したいこと

名前付きのウインドウ構文でエラーが起きずに正しくデータを抽出できるようにしたい

発生している問題・分からないこと

今現在SQLServerにおいて、計測日sample_date(日付型)、負荷量load_val(整数型)のテーブルLoadSampleから直前の計測日と負荷量を求めるSQL文をWINDOW構文を用いて作成しています。

下記の構文では動き、正しい値を得ることができました。

select sample_date as cur_date,
load_val as cur_load,
min(sample_date)
over (order by sample_date rows between 1 preceding and 1 preceding) as latest_date,
min(load_val)
over (order by sample_date rows between 1 preceding and 1 preceding) as latest_load
from loadsample;

しかし、名前付きのウインドウ構文を使用した下記の構文では不適切な構文がありますというエラーメッセージが発生しました。

select sample_date as cur_date,
load_val as cur_load,
min(sample_date) over W as latest_date,
min(load_val) over W as latest_load
from LoadSample
window W as (order by sample_date rows between 1 preceding and 1 preceding);

このエラーを解決するにはどのように構文を変更すればよいのでしょうか。
それとも、SQLServerでは名前付きのウインドウ構文が使用できないのでしょうか。

お手数ですが回答の方をお願いします。

エラーメッセージ

error

1メッセージ 102、レベル 15、状態 1、行 3 2'W' 付近に不適切な構文があります。 3

該当のソースコード

select sample_date as cur_date, load_val as cur_load, min(sample_date) over W as latest_date, min(load_val) over W as latest_load from LoadSample window W as (order by sample_date rows between 1 preceding and 1 preceding);

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

select sample_date as cur_date,
load_val as cur_load,
min(sample_date) over [W] as latest_date,
min(load_val) over [W] as latest_load
from LoadSample
window [W] as (order by sample_date rows between 1 preceding and 1 preceding);

Wを[]で囲んでみたが、結果は同じだった。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2024/08/09 03:50

> WINDOW句には、データベース互換性レベル 160 以上が必要です。 データベース互換性レベルが160より低い場合、データベース エンジンは WINDOW 句を使用してクエリを実行できません。 > [WINDOW (Transact-SQL) - SQL Server | Microsoft Learn](https://learn.microsoft.com/ja-jp/sql/t-sql/queries/select-window-transact-sql?view=sql-server-ver16) このあたりの情報も質問欄にご記載いただくと良いかなと思いました。
AKI_TADA

2024/08/09 08:09

SQLServerをデータベース互換性レベル160のものに変更したところ、正常に動作しました。情報ありがとうございました。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
guest

回答1

0

ベストアンサー

自己解決にしていただいて良かったのですが、同じ内容を回答しますね。

WINDOW句には、データベース互換性レベル 160 以上が必要です。 データベース互換性レベルが160より低い場合、データベース エンジンは WINDOW 句を使用してクエリを実行できません。
WINDOW (Transact-SQL) - SQL Server | Microsoft Learn

投稿2024/08/09 09:31

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問