我想获取上一行,当前行的值并将其添加。如果没有上一行,那么我将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
希望你能帮助我!
答案 0 :(得分:0)
解决方案是先在子查询中运行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`