我正在學習SQL Server查詢考試,並從網站上獲得了一些練習題的演示。其中一個問題要求從兩個表格(Customers
和Orders
)中拉出,使用第一個初始值作爲別名,爲每個客戶查找最近的訂單,並使用最近的訂單先訂購。 Adventureworks
有這樣的表格(Sales.SalesOrderHeader
和Sales.Customer
),所以我創建了這個查詢並認爲我已經解決了。將T-SQL查詢轉換爲ANSI SQL-99標準
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)
- 空訂貨
我不知道,爲什麼我收到了「長標識符」的錯誤,但在這裏是從微軟有它的一些東西,一個鏈接的確切原因。
http://msdn.microsoft.com/en-us/library/hh544365(v=sql.105).aspx
IDK如果這實際上將幫助在考試或沒有,但我感興趣的答案。
我不是ANSI 99標準的天才,但它不支持GROUP BY,JOIN + MAX ......你還需要什麼來解決你的問題? – Najzero
「使用Core SQL-99之外的以下功能:」 - 這些功能是SQL-99的一部分。它們是可選的,因此實現不必支持它們。核心SQL-99是所有實現都需要支持的SQL-99位,但SQL-99遠遠超過了Core SQL-99,並且從您的問題中可以看出,您是否可以使用它。 – hvd
感謝您的澄清,我不知道有什麼不同。它沒有在問題中指定。 – bpfrenchak