SQL 序列计数重复值

问题描述 投票:0回答:1

我有一个 ID 表,其中有一些重复项,我需要根据 ID 创建一个序列。我正在努力实现以下目标。

[ROW]  [ID] [SEQID]
  1     11     1
  2     11     2
  3     12     1
  4     13     1
  5     13     2

我使用的是旧版本的 H2 DB,它没有使用 Windows 函数,因此我必须使用直接 SQL 来完成此操作。我尝试过将表本身连接起来,但我没有得到我想要的结果,因为重复的值会导致问题,有什么想法吗?我在行号中有唯一标识符,但不确定如何使用它来实现我想要的?

SELECT A.ID, COUNT(*) FROM TABLE A
JOIN TABLE B
ON A.ID = B.ID
WHERE A.ID >= B.ID
GROUP BY A.ID;
sequence
1个回答
0
投票

使用计算 seqid 的子查询:

select
  t.row, t.id,
  (select count(*) from tablename where id = t.id and row <= t.row) seqid
from tablename t

它不如窗口函数那么高效,但它可以满足您的期望。
请参阅 demo(适用于 MySql,但它是标准 SQL)。
结果:

| row | id  | seqid |
| --- | --- | ----- |
| 1   | 11  | 1     |
| 2   | 11  | 2     |
| 3   | 12  | 1     |
| 4   | 13  | 1     |
| 5   | 13  | 2     |
© www.soinside.com 2019 - 2024. All rights reserved.