Присвоить идентификаторы различным группам на основе значений столбца desc - PullRequest
1 голос
/ 28 июня 2019

Я использую MySQL 5.5.Я хочу назначить уникальные идентификаторы группам на основе значений столбца.Допустим, у меня есть таблица mytable:

version_col   value_col
  vrsn1           100
  vrsn2           500
  vrsn2           300
  vrsn1           400
  vrsn3           100

Я хочу назначить идентификаторы на основе столбца version_col и порядка удаления для этого столбца.Значение последнего значения vrsn в version_col получает 0 в качестве идентификатора.Примерно так:

version_col   value_col   id
  vrsn1           100     2    
  vrsn2           500     1
  vrsn2           300     1
  vrsn1           400     2
  vrsn3           100     0

Я хочу обновлять весь столбец id каждый раз, когда вставляю новые записи.

Я программист на Python и знаю, что это можно сделать с помощью Pandasпакет с использованием функции DataFrame.groupby.ngroup().Но я хочу обновить столбец с помощью SQL-запроса.

Любая помощь в этом будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Вы можете использовать функцию dense_rank() в MySQL 8 +:

select t.*, dense_rank() over (order by version_col desc) - 1 as seqnum
from t;

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

select t.*
from t
order by t.version_col desc
limit 1;
0 голосов
/ 28 июня 2019

Вы можете попробовать это.Приведенный ниже метод отсортирует ваш version_col и назначит строку / group_id.

Select 
    T.version_col,
    IF(@o = T.version_col, @i, @i := @i+1) as group_id, -- Increase the group_id by +1 if the old version_col <> new version_col
    @o := T.version_col                                 -- [re]-initialise or take note of version_col
FROM
    myTable T join (select @i := -1) I                  -- here initialise your counter
ORDER BY 
    T.version_col desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...