mysql - 如何让增量值在另一列中运行
问题描述
我有一个这样的样本数据
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
我尝试过使用行号,但无法继续前进。
解决方案
如果您不是一次处理数万条记录,则可以尝试以下操作:
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);
推荐阅读
- javascript - 对象操作(分组)
- r - 如何在没有特定日期且不超过 24 小时的情况下添加 lubridate 小时数?
- tabulator - 为什么在我单击标题之前分组不会激活,尽管在表构造函数中有 groupBy
- javascript - ReactJS - 来自网络摄像头的视频流不起作用
- php - 第一次加载页面后如何避免警报
- react-navigation - dangerouslyGetParent - 如果嵌套,则永远不会给出虚假信息
- java - 通过方法 post 使用参数发出 HttpsURLConnection 请求
- laravel - 原始 Laravel 查询作为带有条件的集合
- python - Paramiko SSHClient.connect(...) 在 Windows 上与 Pyinstaller 打包时失败
- matplotlib - 如何仅显示每个第 n 个轴标签