![](/img/trans.png)
[英]How can I set an aggregate value from a select statement to a variable inside MySQL custom function
[英]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.