для анализа данных проекта мне нужно разделить таблицу в отношении датированного табеля работника в следующем формате:Mysql определяемого пользователя переменный не обновляется, когда 0
Employee|Start_Days|End_Days|...
0001|0|7|...
0001|7|14|...
0001|14|21|...
0002|0|7|...
0002|14|21|...
...
Для двух колонок я использую USER- определенной переменной @cur_Count в операторе CASE.
...
(
CASE
e.EMPLOYEE
WHEN
@cur_Employee
THEN
@cur_Count := @cur_Count + 1
ELSE
@cur_Count := 1
AND @cur_Employee := e.EMPLOYEE
END
) * 7 AS START_DAYS,
(@cur_Count + 1) * 7 AS END_DAYS,
...
FROM
tmp_MS_Relevant_Employees AS e,
hlp_MS_Calendar_Weeks AS c,
(SELECT @cur_Employee = '', @cur_Count := 0) AS init
WHERE
...
Это утверждение отлично работает - с небольшим исключением того, что (так как @cur_Count сбрасывается на 1 в предложении ELSE) первая запись для сотрудника начать с 7-й день вместо 0.
Однако, если Я использую один из следующих
@cur_Count := 0
@cur_Count := @cur_Count * 0
@cur_Count := @cur_Count - @cur_Count
или сбросить переменную 0 любым другим способом, то результат выглядит следующим образом:
Employee|Start_Days|End_Days|...
0001|0|7|...
0001|0|7|...
0001|0|7|...
S o очевидно, что переменная игнорирует любую попытку обновить ее значение после сброса на 0. В то время как эту проблему легко обойти, она все еще озадачивает (и обходной путь не является аккуратным). Я что-то упустил здесь или это ошибка MySql?
Заранее благодарим за любые отзывы!
где вы инициализировать переменную. вы можете показать полное заявление? вы можете добавить ** CROSS JOIN (SELECT @cur_Count: = 0) в качестве init ** для этого –
@ Bernd Buffen Я добавил инициализацию к сообщению выше. – Markus