Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql根据其他列的最近值更新列_Mysql - Fatal编程技术网

mysql根据其他列的最近值更新列

mysql根据其他列的最近值更新列,mysql,Mysql,我有一张这样的桌子: CREATE TABLE IF NOT EXISTS `exam_results` ( `id` int(11) NOT NULL AUTO_INCREMENT, `student_code` int(11) NOT NULL, `total_level` int(11) NOT NULL, `total_rank` int(11) NOT NULL, `total_level_2` int(11) NOT NULL, `total_rank_2`

我有一张这样的桌子:

CREATE TABLE IF NOT EXISTS `exam_results` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `student_code` int(11) NOT NULL,
  `total_level` int(11) NOT NULL,
  `total_rank` int(11) NOT NULL,
  `total_level_2` int(11) NOT NULL,
  `total_rank_2` int(11) NOT NULL,
);
total_level和total_rank以及total_level_2有值,但total_rank_2为空

我想选择total_level_2的值,并在total_level内找到最接近的值, 然后用找到的行的总秩更新总秩2

如何在查询中执行此操作

更新:

例如,更新后的最后一行应该是100。 因为最后一行的total_level_2的最近值在第一行内,所以最后一行的total_rank_2将是第一行的total_rank

更新后的表:

total_level    |    total_rank    |    total_level_2    |    total_rank_2
--------------------------------------------------------------------------
1500           |    100           |    2000             |    70
--------------------------------------------------------------------------
1700           |    90            |    3500             |    70
--------------------------------------------------------------------------
2000           |    70            |    1500             |    100
试试这个:

Update table set total_rank_2 =(Select total_rank
  from table
 where total_leve<=total_level_2
 order by total_level Desc
 limit 1)

会有三级考试吗?
Update table set total_rank_2 =(Select total_rank
  from table
 where total_leve<=total_level_2
 order by total_level Desc
 limit 1)
CREATE TEMPORARY TABLE IF NOT EXISTS tempresults_cal AS (select cni.*,
                       (select   total_rank
                        from     exam_results ci
                        where ci.analyze_id="'.$Params->get('analyze_id').'"
                        order by abs(total_level - cni.total_level_2)
                        limit 1
                       ) as new_rank
                from exam_results cni;

                UPDATE exam_results
                INNER
                  JOIN tempresults_cal
                    ON tempresults_cal.id = exam_results.id 
                   SET exam_results.total_rank_2 = tempresults_cal.new_rank