这是我的表示例:
Time | Predicted | Actual | High
---------+------------+----------+---------
01:00:00 | 100 | 100 | NULL
02:00:00 | 200 | 50 | NULL
01:00:00 | 150 | 100 | NULL
02:00:00 | 180 | 80 | NULL
我想在Predicted中找到最高价值,并将其置于“高”列(按特定行)
====== 这是我到目前为止所做的 - 两个独立的陈述,但我想要合并为一个动作。
UPDATE table SET High="200" WHERE Time='01:00:00';
INSERT INTO table (High) SELECT MAX(Predicted) AS Predicted FROM table;;
当我使用上面的 INSERT 声明时,我得到:
Time | Predicted | Actual | High
---------+------------+-----------+---------
01:00:00 | 100 | 100 | NULL
02:00:00 | 200 | 50 | NULL
01:00:00 | 150 | 100 | NULL
02:00:00 | 180 | 80 | NULL
00:00:00 | NULL | NULL | 200
=======================================
我想以某种方式结合上述两个陈述和以下结果
Time | Predicted | Actual | High
---------+-------------+----------+--------
01:00:00 | 100 | 100 | 200
02:00:00 | 200 | 50 | NULL
01:00:00 | 150 | 100 | NULL
02:00:00 | 180 | 80 | NULL
答案 0 :(得分:2)
您可以使用以下查询来达到预期的结果。但不确定是否可以使用单一查询。
SET @predicted=(SELECT MAX(Predicted) FROM table);
UPDATE table SET High=@predicted WHERE Time='01:00:00';
答案 1 :(得分:2)
创建功能 get_max_predicted
CREATE FUNCTION `get_max_predicted`() RETURNS int(11) LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER COMMENT '' GET_MAX_PREDICTED: BEGIN DECLARE `_maxPredicted` INT; SELECT MAX(predicted) INTO _maxPredicted FROM `table`; IF _maxPredicted IS NULL THEN SET _maxPredicted = 0; END IF; RETURN _maxPredicted; END;
并在更新时使用此
UPDATE table SET High=get_max_predicted() WHERE Time='01:00:00';