mysql порядковый номер по значению coloumn (запрос UPDATE)

0

Например: у меня есть таблица со столбцами

______________________
|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   |

пожалуйста помоги!!

Теги:
sorting
sequence

1 ответ

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;
  • 0
    Спасибо тебе большое ! я использую второй метод и работаю ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню