功能未实现:WINDOW / ORDER BY

时间:2014-01-24 06:29:57

标签: sql derby row-number

我正在使用嵌入式Apache Derby数据库并执行以下查询:

SELECT 
    someUniqueValue, 
    row_number() over(ORDER BY someUniqueValue) as ROWID 
FROM 
    myTable;

someUniqueValue是varchar。

我得到了例外:

  

java.sql.SQLFeatureNotSupportedException:未实现的功能:WINDOW / ORDER BY

如果我将查询中的row_number()行更改为:

row_number() over() as ROWID 

查询运行正常(虽然结果对我来说没用)。

The Derby documentation表示支持。我做错了什么?

1 个答案:

答案 0 :(得分:3)

您发布的链接只是一个草稿,用于指定如何实施该功能。

如果您向下滚动一下,您会发现:

  

从10.4.1.3版本开始,Derby中包含ROW_NUMBER()窗口函数的实现。限制和使用说明可在“德比参考手册”

中找到

当您查看Derby手册(您的链接不是手册)http://db.apache.org/derby/docs/10.10/ref/rreffuncrownumber.html时,您会找到一系列限制:

  • Derby当前不允许在OVER()子句中指定命名或未命名的窗口规范,但需要空括号。这意味着将对整个结果集评估函数。
  • 当前无法在WHERE子句中使用ROW_NUMBER函数。
  • Derby当前不支持子查询中的ORDER BY,因此目前无法保证SELECT子查询中的行顺序。如果订单是公司要求,则可以使用优化程序覆盖来强制优化程序使用在所需列上排序的索引。