SQLite: Как обновить строки с последовательностью чисел? - PullRequest
0 голосов
/ 07 апреля 2020

В SQLIte я хотел бы изменить нумерацию значений в указанном столбце c на последовательность чисел. Например, столбец релевантности в этих строках:

relevance | value
-------------------
3         | value1
5         | valueb
8         | valuex
9         | valueaa

должен быть обновлен, начиная с 1 с шагом 1:

relevance | value
-------------------
1         | value1
2         | valueb
3         | valuex
4         | valueaa

То, что я ищу, выглядит примерно так:

-- first set all to startvalue
UPDATE MyTable SET relevance = 0; 
-- then renumber:
UPDATE MyTable SET relevance = (some function to increase by 1 to the previous row);

Я пробовал это, но оно не увеличивается, похоже, что Макс не оценивает каждую строку:

UPDATE MyTable SET relevance = (SELECT Max(relevance ))+1;

1 Ответ

2 голосов
/ 07 апреля 2020

Сначала создайте временную таблицу, в которую вы вставите столбец relevance из вашей таблицы и с помощью ROW_NUMBER() оконной функции создадите другой столбец с новой последовательностью, а затем обновите эту временную таблицу:

drop table if exists temp.tmp;

create temporary table tmp as 
select relevance, row_number() over (order by relevance) rn
from MyTable;

update MyTable
set relevance = (
  select rn from temp.tmp
  where temp.tmp.relevance = MyTable.relevance
);

drop table temp.tmp;

Смотрите демо .

...