Эта проблема подчеркивает проблему с использованием переменных для этой формы вычислений. Ваша проблема заключается в том, что вы оцениваете @num
в списке SELECT
позже, чем вы оцениваете @part
, и, как это происходит, @part
получает новое значение до того, как вычисляется @num
, что означает, что @part=AAB
всегда верно. Вы можете обойти это, поместив @num
перед @part
в списке SELECT
, но, как говорится в руководстве :
Порядок вычисления выражений с участием пользовательских переменных не определено. Например, нет гарантии, что SELECT @a, @ a:=@a+1 сначала вычислит @a, а затем выполнит присваивание.
Как обычно, похоже, что он работает таким образом, поэтому до обновления вы, вероятно, можете использовать этот запрос:
select
@num:=if(@part=AAB,@num:=@num+1,1) as rank,
@part:=AAB as AAB,
AAG,AAD
from IMPO_MEMB_AAAE a, (select @part:=null,@num:=0) b
order by AAB,AAG;
Вывод:
rank AAB AAG AAD
1 10000751 2020-01-02 16:06:00 41
1 10033980 2020-01-02 22:55:00 40
1 10041030 2020-01-02 22:50:00 41
2 10041030 2020-01-02 23:53:00 40
3 10041030 2020-01-02 23:53:00 40
4 10041030 2020-01-02 23:53:00 40
1 10049083 2020-01-02 12:58:00 41
2 10049083 2020-01-02 12:58:00 40
3 10049083 2020-01-02 12:58:00 40
4 10049083 2020-01-02 12:58:00 41
5 10049083 2020-01-02 12:58:00 40
6 10049083 2020-01-02 12:58:00 40
1 10061286 2020-01-02 05:44:00 41
1 10081536 2020-01-02 12:11:00 41
1 10092699 2020-01-02 19:12:00 41
1 10116976 2020-01-02 22:03:00 41
Демонстрация на dbfiddle