Mysql 根据desc列值将ID分配给不同的组
我正在使用mysql 5.5。我想根据列值为组分配唯一id。 假设我有一个表mytable: 我想根据version\u col列和该列的desc order分配id。表示版本中最新的vrsn值取0作为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
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;
你怎么知道一个版本的年代?你怎么知道一个版本的年代?