首页 > 解决方案 > 如何让增量值在另一列中运行

问题描述

我有一个这样的样本数据

ID  RN 
1   1
1   2
1   3
1   4
1   5
1   6
1   7
500 8
500 9
500 10
500 11
861 12
861 13
861 14
853 15
843 16

我试图得到这样的结果

ID  RN OP
1   1  NULL
1   2   1
1   3   1
1   4   1
1   5   1
1   6   1
1   7   1
500 8  NULL
500 9   8
500 10  8
500 11  8
861 12  NULL
861 13  12
861 14  12
853 15  NULL
843 16  NULL

我尝试过使用行号,但无法继续前进。

标签: mysqlsql

解决方案


如果您不是一次处理数万条记录,则可以尝试以下操作:

SELECT src.`id`, src.`rn`,
       (SELECT MIN(z.`rn`) FROM `Running` z WHERE z.`id` = src.`id` and z.`rn` < src.`rn`) as `op`
  FROM `Running` src
 ORDER BY src.`rn`;

这将为您提供基于此源数据的结果:

DROP TABLE IF EXISTS `Running`;
CREATE TABLE IF NOT EXISTS `Running` (
    `id`        int(11)       UNSIGNED NOT NULL    ,
    `rn`        int(11)       UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `Running` (`id`, `rn`)
VALUES (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7),
       (500, 8), (500, 9), (500, 10), (500, 11),
       (861, 12), (861, 13), (861, 14),
       (853, 15),
       (843, 16);

推荐阅读