如何找到一列的MAX值并将其放入另一列的特定行

时间:2014-10-27 05:18:03

标签: mysql

这是我的表示例:

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

2 个答案:

答案 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';