我正在为 SQL Server 查询考试而学习,并且我从网站上获得了一些练习题的演示。其中一个问题要求从两个表 (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 Elementary OLAP 操作中包含的事物的定义:
- 窗口函数(ROW_NUMBER、RANK 和 DENSE_RANK)
- 未命名的窗口规格:
- 窗口分区(PARTITION BY)
- 窗口排序(ORDER BY)
- 窗框(ROWS/RANGE PRECEDING/FOLLOWING)
- 空序
我不确定我收到“长标识符”错误的确切原因,但这里有一个来自 Microsoft 的链接,上面有一些东西。
http://msdn.microsoft.com/en-us/library/hh544365(v=sql.105).aspx
不知道这是否真的有助于考试,但我对答案很感兴趣。