【问题标题】:Feature not implemented: WINDOW/ORDER BY未实现的功能:WINDOW/ORDER BY
【发布时间】:2014-01-24 06:29:56
【问题描述】:

我正在使用嵌入式 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 表示支持。我做错了什么?

【问题讨论】:

    标签: sql derby row-number


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2013-03-15
      • 2021-12-12
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多