使用 MySQL 选择没有连续 RowID 的匹配值后的下一条记录

使用 MySQL 选择没有连续 RowID 的匹配值后的下一条记录

如何选择符合条件的行旁边的所有行?但考虑到没有像 ID 字段这样的连续 RowID

这是10行的表结构,但将来行数会增加。

纯文本:

ID      Date        N1
1     DateTime    9  
2     DateTime    2
3     DateTime    5
4     DateTime    9
5     DateTime    3
6     DateTime    6
7     DateTime    7
8     DateTime    9
20    DateTime    3 //Sequence broken
21    DateTime    9

笔记: “DateTime”字符串只是符号性的,它可以是任何日期时间。

我想知道第一个N1数字后面的数字:9

我尝试了几种方法,但结果不是我想要的。

预期结果是:

ID      Date        N1
2     DateTime      2
5     DateTime      3
20    DateTime      3

实现此目的的简单方法已发布在问题,但前提是 RowID 保持序列。

答案1

您可以创建两个临时表其中一个使用变量为@row_num每个行号创建一个索引,并且无论值如何,都会将每个行号递增一RowID。然后从这个临时表中,您将从row_num+1中选择N1值等于的列9。从那里,您可以选择值匹配的列idN1列,row_num从而获得所需的结果。

SQL 查询

SET @row_num:=0;
DROP TABLE IF EXISTS t1;
CREATE TEMPORARY TABLE t1 (SELECT @row_num:=@row_num+1 AS row_num, id, N1 FROM numbers);

DROP TABLE IF EXISTS t2;
CREATE TEMPORARY TABLE t2 (Select row_num+1 as row_num FROM t1 WHERE N1 = 9);

SELECT id, N1 FROM t1
WHERE row_num IN (Select * From t2);

确认

从数字中选择 * (此处缺少RowID等号5

在此处输入图片描述

以上 SQL 查询

在此处输入图片描述


更多资源

相关内容