我正在尝试从 Apache Derby 数据库中的数据获取某种“运行计数”。
例如所选数据样本
第 1 部分 | 第二部分 |
---|---|
d1 | a1 |
d1 | a2 |
d2 | a1 |
d2 | a2 |
我想编写一个产生以下结果的 SQL 语句
第 1 部分 | 第二部分 | 排名 |
---|---|---|
d1 | a1 | 1 |
d1 | a2 | 2 |
d2 | a1 | 1 |
d2 | a2 | 2 |
即从 1 开始计算“排名”,但如果第一列中的值发生变化,则“重新开始”计数。
我无法找到如何使用纯 SQL 语句执行此操作,也无法使用用户定义的函数执行此操作,因为我需要跨多个结果行进行访问。
在 Apache Derby 中有办法做到这一点吗?
当您有如下数据时:
CREATE TABLE mytable (
Part1 CHAR(2) ,
Part2 CHAR(2) );
INSERT INTO mytable VALUES
('d1','a1'),
('d1','a2'),
('d2','a1'),
('d2','a2');
你可以使用 SQL:
select Part1,Part2,ROW_NUMBER() OVER (PARTITION BY Part1) as R
from mytable;
但不幸的是德比并没有认识到这一点:
错误 42X01:语法错误:在第 1 行第 39 列遇到“PARTITION”。 发出“help”命令以获取有关 IJ 命令语法的一般信息。 任何无法识别的命令都会被视为潜在的 SQL 命令并直接执行。 有关您的服务器支持的 SQL 语法的详细信息,请参阅您的 DBMS 服务器参考文档。