Mysql 用户定义的变量在 0 时不更新

Mysql user-defined variable not updating when 0

对于数据分析项目,我需要按照以下格式拆分 table 涉及日期的员工时间表:

Employee|Start_Days|End_Days|...
0001|0|7|...
0001|7|14|...
0001|14|21|...
0002|0|7|...
0002|14|21|...
...  

对于这两列,我在 CASE 语句中使用用户定义的变量@cur_Count。

...
(
    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 在 ELSE 子句中被重置为 1)员工的第一个条目从第 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|...

显然,变量在重置为 0 后会忽略任何更新其值的尝试。虽然这个问题很容易解决,但它仍然令人费解(而且解决方法并不整洁)。我在这里遗漏了什么或者这是 MySql 的错误吗?

提前感谢您的任何反馈!

AND 表达式的顺序切换为

    (@cur_Employee := e.EMPLOYEE)
    AND (@cur_Count := 0)

这是因为AND进行了短路。当您分配 0 时,它被视为 FALSE,因此它不会执行分配。

另一种选择是在乘法之后减去 7

(
    CASE 
        e.EMPLOYEE
    WHEN
        @cur_Employee
    THEN
        @cur_Count := @cur_Count + 1
    ELSE
        (@cur_Count := 1)
        AND (@cur_Employee   := e.EMPLOYEE)
    END
) * 7 - 7 AS START_DAYS,