我正在学习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