gpt4 book ai didi

MySQL如何添加查询来填充MySQL变量

转载 作者:行者123 更新时间:2023-11-29 17:51:21 25 4
gpt4 key购买 nike

也许很简单,但对我来说,我不知道如何添加查询来填充“循环”的第一次迭代的变量@lastValue。

这是现在的查询:

    SELECT DATE_FORMAT(time,'%Y-%m-%d %H:%i:00') as time, SUM(diff) as value
FROM (select
EL.time,
EL.value,
if(@lastSN = EL.sensor_id, EL.value - @lastValue, 0.0) as diff,
@lastSN := EL.sensor_id,
@lastValue := EL.value
FROM data_test_debug EL, (SELECT @lastSN := 0,
@lastValue := 0) SQLVars
WHERE EL.sensor_id = "ecam"
AND EL.value_id = "gas"
ORDER BY EL.time
) AS t
GROUP BY DATE_FORMAT(time,'%Y-%m-%d %H:%i:%s');

按照定义,变量@lastValue 的值在第一次迭代中为0.0

问题 -> 我必须通过另一个 SELECT 查询填充该值,我怎样才能实现这一点?对于这个例子,我们可以保持简单,例如:

SELECT lastValue from table WHERE id=1

感谢您的帮助

最佳答案

使用另一个内联 View ,就像 SQLVars 对其他变量所做的那样。或者您可以只修改 SQLVars View 。

例如

  FROM data_test_debug EL
CROSS
JOIN ( SELECT @lastSN := 0 ) SQLVars
CROSS
JOIN ( SELECT @lastValue := t.lastvalue
FROM table t
WHERE t.id=1
ORDER BY t.id, t.lastvalue
LIMIT 1
) lv
<小时/>

我强烈建议放弃旧式的连接操作逗号语法,并用更新的 JOIN 关键字替换。对于 MySQL,CROSS 关键字不是必需的,但我认为它确实向 future 的读者表明省略 ON 子句是有意的。

<小时/>

它不必是两个单独的内联 View ,这会达到相同的结果:

  FROM data_test_debug EL
CROSS
JOIN ( SELECT @lastSN := 0
, @lastValue := t.lastvalue
FROM table t
WHERE t.id=1
ORDER BY t.id, t.lastvalue
LIMIT 1
) lv

如果我们需要根据单独的查询设置多个变量,我们会希望使用单独的内联 View 。

关于MySQL如何添加查询来填充MySQL变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49308865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com