gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:41:39 25 4
gpt4 key购买 nike

我想获取上一行、当前行的值,并将它们相加。如果没有上一行,那么我会将 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语句,然后才运行变量计算:


选择日期时间,
@previous AS 以前,
@previous + MaxVal 加入,
@previous := MaxVal AS 当前
从 (
选择 `dateTime`, MAX(`value`) AS MaxVal
从`表`
在'2018-07-01'和'2018-07-30'之间的'dateTime'
按“日期时间”分组
) 组
按“日期时间”排序

关于MySQL - 如何在 select 语句中设置变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256961/

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