繁体   English   中英

MySQL-如何在select语句中设置变量值?

[英]MySQL - How to set variable value inside select statement?

我想获取上一行,当前行的值,并将其添加。 如果没有上一行,那么我将previous设置为0。这就是我尝试过的方法。

SET @previous = CASE WHEN (SELECT MAX(value) FROM table WHERE dateTime < '2018-07-01') IS NULL 
THEN 0 
ELSE (SELECT MIN(value) FROM table WHERE dateTime BETWEEN '2018-07-01' AND '2018-07-30') 
END;

SELECT @previous AS Previous, 
@previous:=MAX(value) AS Current, 
(@previous + MAX(value)) AS Joined
FROM table 
WHERE dateTime BETWEEN '2018-07-01' AND '2018-07-30'
GROUP BY dateTime;

表格内容如下:

dateTime   | value 
2018-07-01 | 1
2018-07-01 | 1.2
2018-07-02 | 1.7
2018-07-03 | 2.1
2018-07-05 | 2.6
2018-07-05 | 3
2018-07-06 | 3.5

不幸的是,设置@previous:= MAX(value)不会更改下一行的@previous值,如果初始化时为0,它将保持为0。示例结果:

dateTime   | Previous | Current | Joined
2018-07-01 | 0        | 1.2     | 1.2
2018-07-02 | 0        | 1.7     | 1.7
2018-07-03 | 0        | 2.1     | 2.1
2018-07-05 | 0        | 4       | 4
2018-07-06 | 0        | 4       | 4

预期结果

dateTime   | Previous | Current | Joined
2018-07-01 | 0        | 1.2     | 1.2
2018-07-02 | 1.2      | 1.7     | 2.9
2018-07-03 | 1.7      | 2.1     | 3.8
2018-07-05 | 2.1      | 3       | 5.1
2018-07-06 | 3        | 3.5     | 6.5

希望你能帮我!

解决方案是先在子查询中运行GROUP BY语句,然后才运行变量计算:

SELECT dateTime, @previous AS Previous, @previous + MaxVal AS Joined, @previous := MaxVal AS Current FROM ( SELECT `dateTime`, MAX(`value`) AS MaxVal FROM `table` WHERE `dateTime` BETWEEN '2018-07-01' AND '2018-07-30' GROUP BY `dateTime` ) grp ORDER BY `dateTime`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM