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

时间:2019-06-28 13:17:37

标签: mysql sql

我正在使用mysql 5.5。我想基于列值将唯一的ID分配给组。 假设我有一张桌子mytable

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

我想基于version_col列并为该列的降序分配ID。表示version_col中的最新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查询更新该列。

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

2 个答案:

答案 0 :(得分:0)

您可以尝试一下。下面的方法将对您的// nested objects are made flat to one level var flattenObject = Object.assign( {}, ...function _flatten(o) { return [].concat(...Object.keys(o) .map(k => typeof o[k] === 'object' ? _flatten(o[k]) : ({[k]: o[k]}) ) ); }(obj) ) // now join the values var joinedValues = Object.values(flattenObject).join(';'); console.log(joinedValues); 进行排序并分配一个row / group_id。

version_col

答案 1 :(得分:0)

您可以在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;