MySQL变量不能立即使用

时间:2012-01-24 00:28:47

标签: php mysql

我有以下SQL必须运行两次,以便“duration_in_queue”填充非NULL值。

我假设没有设置或存储SQL变量?

我已经花了好几个小时试图找到一个无济于事的解决方案,希望有人可以提供帮助:)

SELECT
    DATE(pm.rstdtime) AS cntldate,
    sh.sd_no,
    sh.work_group,
    ROUND(
        IF (
            @sd_id = sh.sd_no,
            (
                TIMESTAMPDIFF(
                    SECOND,
                    @dt,
                    sh.data_entry_dtime
                ) / 86400
            ) * 86400 + LEAST(0, @dt := sh.data_entry_dtime),
            NULL + LEAST(0, @sd_id := sh.sd_no) + (@dt := sh.data_entry_dtime)
        )
    ) AS duration_in_queue
FROM
    p_master pm
LEFT JOIN s_history sh ON pm.sd_no = sh.sd_no,
 (SELECT(@sd_id := 0)) AS a
WHERE
    sh.log_text IN (
        'Created',
        'Dispatched',
        'Restored'
    )
AND CONVERT_TZ(
    sh.data_entry_dtime,
    'GMT',
    'Australia/NSW'
) <= pm.rstdtime
ORDER BY
    sh.sd_no,
    sh.data_entry_dtime,
    sh.log_text
LIMIT 10

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

  

我假设没有设置或存储SQL变量?

这可能是正确的。

根据the documentation

  

作为一般规则,您不应该为用户变量赋值并在同一语句中读取值。您可能会得到您期望的结果,但这不能保证。涉及用户变量的表达式的评估顺序是未定义的,可能会根据给定语句中包含的元素进行更改;此外,MySQL服务器版本之间的订单不保证相同。