H2 SQL 具有重复值的序列计数
H2 SQL Sequence count with duplicate values
我有 table 个 ID,其中有一些重复,我需要根据这些 ID 创建一个序列。我正在努力实现以下目标。
[ROW] [ID] [SEQID]
1 11 1
2 11 2
3 12 1
4 13 1
5 13 2
我使用的是旧版本的 H2 DB,它没有使用 windows 函数,因此我必须直接使用 SQL 来完成此操作。我已经尝试加入 table 本身,但我没有得到我想要的结果,因为重复值会导致问题,有什么想法吗?我在行号中有唯一标识符,但不确定如何使用它来实现我想要的?
SELECT A.ID, COUNT(*) FROM TABLE A
JOIN TABLE B
ON A.ID = B.ID
WHERE A.ID >= B.ID
GROUP BY A.ID;
使用计算seqid的子查询:
select
t.row, t.id,
(select count(*) from tablename where id = t.id and row <= t.row) seqid
from tablename t
它不如 window 函数高效,但它可以满足您的期望。
请参阅 demo(对于 MySql 但它是标准的 SQL)。
结果:
| row | id | seqid |
| --- | --- | ----- |
| 1 | 11 | 1 |
| 2 | 11 | 2 |
| 3 | 12 | 1 |
| 4 | 13 | 1 |
| 5 | 13 | 2 |
我有 table 个 ID,其中有一些重复,我需要根据这些 ID 创建一个序列。我正在努力实现以下目标。
[ROW] [ID] [SEQID]
1 11 1
2 11 2
3 12 1
4 13 1
5 13 2
我使用的是旧版本的 H2 DB,它没有使用 windows 函数,因此我必须直接使用 SQL 来完成此操作。我已经尝试加入 table 本身,但我没有得到我想要的结果,因为重复值会导致问题,有什么想法吗?我在行号中有唯一标识符,但不确定如何使用它来实现我想要的?
SELECT A.ID, COUNT(*) FROM TABLE A
JOIN TABLE B
ON A.ID = B.ID
WHERE A.ID >= B.ID
GROUP BY A.ID;
使用计算seqid的子查询:
select
t.row, t.id,
(select count(*) from tablename where id = t.id and row <= t.row) seqid
from tablename t
它不如 window 函数高效,但它可以满足您的期望。
请参阅 demo(对于 MySql 但它是标准的 SQL)。
结果:
| row | id | seqid |
| --- | --- | ----- |
| 1 | 11 | 1 |
| 2 | 11 | 2 |
| 3 | 12 | 1 |
| 4 | 13 | 1 |
| 5 | 13 | 2 |