在H2中使用带有ORDER BY的ROW_NUMBER() OVER()

10

我正在尝试在H2数据库中使用ROW_NUMBER子句对表执行查询。以下是我的查询:

SELECT ROW_NUMBER() OVER (order by data), name FROM students

但是我在H2控制台中遇到了一个错误:

SQL语句中的语法错误:"SELECT ROW_NUMBER() OVER (order[*] by data), name FROM students",应该是")"。

我注意到只有当OVER子句为空时,它才能正常工作,例如OVER();

有什么想法吗?


H2 不支持此功能。 - user330315
@a_horse_with_no_name:现在是这样的 :-). 请看我的回答。 - sleske
1个回答

21

在H2数据库 V1.4.198版本(2019年2月发布)之前,不支持此功能。您需要使用:

select rownum(), name 
from students 
order by data

从V1.4.198开始,支持ROW_NUMBER(和其他一些窗口函数)(请参见H2 Changelog),因此现在您的查询应该按预期工作。


7
有很多原因,例如MySQL不是用Java编写的,而且更加复杂和庞大。 - Thomas Mueller
1
嗯,但是使用Java编写的好处到底是什么呢?(MySQL可以在Windows、Unix和所有主要操作系统上运行。)通常人们不会将“使用Java编写”作为优势,因为绑定到JVM是一个缺点而不是优势..... - Pacerier
10
对于使用Java的开发者来说,使用Java数据库比使用MySQL要简单得多(无需安装额外软件)。而且它的速度也更快,特别是内存模式。顺便提一下,您还可以在Android上运行H2(即使通常使用SQLite)。 - Thomas Mueller
12
实际上,大多数人使用H2作为单元测试数据库或嵌入式数据库(多平台,如果你的应用程序是用Java编写的,比如MySQL更容易安装)。 - Thomas Mueller
1
似乎你不能这样说。 - Pavel_K
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接