Mysql 根据desc列值将ID分配给不同的组

Mysql 根据desc列值将ID分配给不同的组,mysql,sql,Mysql,Sql,我正在使用mysql 5.5。我想根据列值为组分配唯一id。 假设我有一个表mytable: 我想根据version\u col列和该列的desc order分配id。表示版本中最新的vrsn值取0作为id。 大概是这样的: version_col value_col id vrsn1 100 2 vrsn2 500 1 vrsn2 300 1 vrsn1 40

我正在使用mysql 5.5。我想根据列值为组分配唯一id。 假设我有一个表mytable:

我想根据version\u col列和该列的desc order分配id。表示版本中最新的vrsn值取0作为id。 大概是这样的:

version_col   value_col   id
  vrsn1           100     2    
  vrsn2           500     1
  vrsn2           300     1
  vrsn1           400     2
  vrsn3           100     0
每当我插入新记录时,我想更新整个id列

我是一名Python程序员,我知道这可以通过使用DataFrame.groupby.ngroup函数的Pandas包来完成。但是我想使用SQL查询更新列


在此方面的任何帮助都将不胜感激。

您可以试试这个。下面的方法将对您的版本列进行排序,并分配一个行/组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

你可以试试这个。下面的方法将对您的版本列进行排序,并分配一个行/组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
您可以在MySQL 8+中使用dense_rank函数:

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;
您可以在MySQL 8+中使用dense_rank函数:

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;

你怎么知道一个版本的年代?你怎么知道一个版本的年代?