H2 SQL-последовательность с повторяющимися значениями - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть таблица идентификаторов с некоторыми дубликатами, и мне нужно создать последовательность на основе идентификаторов. Я пытаюсь добиться следующего.

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

Я использую старую версию базы данных H2, которая не использует функции 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;

1 Ответ

0 голосов
/ 07 ноября 2019

Используйте подзапрос, который считает 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     |
...