私は SQL Server クエリ試験の勉強をしていて、Web サイトからいくつかの練習問題のデモを入手しました。質問の 1 つは、最初のイニシャルをエイリアスとして使用して 2 つのテーブル (Customers
とOrders
) からプルし、各顧客の最新の注文を見つけて、最新の注文から最初に注文するよう求めています。Adventureworks
にはこのようなテーブル (Sales.SalesOrderHeader
とSales.Customer
) があるので、このクエリを作成し、解決したと考えました。
SELECT
c.CustomerID,
MAX(o.OrderDate) OVER (PARTITION BY c.customerid) AS MostRecentOrderDate
FROM
Sales.SalesOrderHeader o
INNER JOIN
Sales.Customer c ON o.CustomerID = c.CustomerID
ORDER BY
OrderDate DESC
しかし...質問の最後に、ANSI SQL-99標準に準拠していることを確認するように言われています。
だから私はこのコードをチェックしました
http://developer.mimer.com/validator/parser99/index.tml#parser
そしてそれは私に言う
コア SQL-99 以外の次の機能が使用されます:
T611、基本的な OLAP 操作
F391、長い識別子
T611 基本 OLAP 操作に含まれるものの定義は次のとおりです。
- ウィンドウ関数 (ROW_NUMBER、RANK、および DENSE_RANK)
- 名前のないウィンドウの仕様:
- ウィンドウの分割 (PARTITION BY)
- ウィンドウ順序付け (ORDER BY)
- ウィンドウ フレーミング (ROWS/RANGE PRECEDING/FOLLOWING)
- null の順序付け
「Long Identifiers」エラーが発生する正確な理由はわかりませんが、Microsoft からのリンクにいくつかのものがあります。
http://msdn.microsoft.com/en-us/library/hh544365(v=sql.105).aspx
これが実際に試験に役立つかどうかはわかりませんが、私は答えに興味がありました.