mysql序列号按值coloumn(查询UPDATE)

时间:2018-02-20 16:37:08

标签: mysql sql sorting sequence

例如: 我有一个列

的表
______________________
|field_id|Code|seq_num|
|   1    |  a |   1   |
|   1    |  a |   2   |
|   1    |  a |   3   |
|   2    |  a |   4   |
|   2    |  a |   5   |
|   3    |  a |   6   |
|   3    |  a |   7   |
|   3    |  a |   8   |

如何查询,所以序列号看起来像这样

 _____________________
|field_id|Code|seq_num|
|   1    |  a |   1   |
|   1    |  a |   2   |
|   1    |  a |   3   |
|   2    |  a |   1   |
|   2    |  a |   2   |
|   3    |  a |   1   |
|   3    |  a |   2   |
|   3    |  a |   3   |

请帮助!!

1 个答案:

答案 0 :(得分:0)

一种方法是获得该字段的最小序列:

select t.field_id, t.code,
       (seq_num - min_seqnum + 1) as seqnum
from t join
     (select field_id, min(seq_num) as min_seq_num
      from t
      group by field_id
     ) f
     on t.field_id = f.field_id;

如果您不相信当前序列号没有间隙,您也可以使用变量执行此操作:

select . . .,
       (@rn := if(@f = field_id, @rn + 1,
                  if(@f := field_id, 1, 1)
                 )
       ) as seq_no
from (select t.*
      from t
      order by field_id, seq_no
    ) t cross join
    (select @f := '', @rn := 0) params;