我有一张包含以下数据的表格."record\u id"是自动递增的主键,"name"被索引.

record_id name payload
1         a    x
2         b    y
3         c    y
4         b    z
5         a    z
6         a    w
7         b    y
8         c    x

如何 for each "名称"获取成对的连续行?我知道我必须将表连接到自身,但不知道如何仅连接record\u id大于正在处理的行的第一行.对于任何"名称",最后一行之后的空填充部分也很重要.再一次,我明白我可能必须使用LEFT-JOIN.

1 a x 5 a z
5 a z 6 a w
6 a w NULL NULL NULL
2 b y 4 b z
4 b z 7 b y
7 b y NULL NULL NULL
3 c y 8 c x
8 c x NULL NULL NULL

我使用的是MySQL 8.0之前的版本,所以如果这很重要的话,我不能使用窗口函数.

谢谢.

推荐答案

try 以下基于对应的record\u id次高值使用外部联接的解决方案.

select *
from t
left join t t2 on t2.record_id = (
  select record_id from t t2 
  where t2.name=t.name and t2.record_id > t.record_id 
  order by t2.record_id limit 1
) 
order by t.name, t.record_id;

Demo Fiddle

Mysql相关问答推荐

返回50%的随机结果

可以在MySQL表名中使用表情包吗?

如何计算超过特定数字的所有不同ID组,然后返回这些ID?

如何在JOIN中获取MySQL中的项目总数

如何计算具有权重属性的记录数

如何在 mysql 中获取 Day Wise 的平均值?

在 Codeigniter MySQL 中从另一个数据库获取数据

mysql 执行注释部分

为什么 fetch 方法不能获取任何东西?(feat node.js,restAPI)

MySQL IF() 函数根据指定条件执行代码块

按长度过滤 varbinary 字段

基于两个单元格值的 SQL 过滤表

MySQL - 如何在 INSERT 语句中将字符串值解析为 DATETIME 格式?

如何删除没有临时表的 MySQL 表中的所有重复记录

问号在 MySQL 中WHERE column = ?的意义是什么?

MySQL错误 1005 (HY000): 无法创建表 'foo.#sql-12c_4' (errno: 150)

如何从两个不同的日期获得年份差异?

第 1 行的 CSV 输入中的列数无效错误

MySQL使用phpmyadmin重新排列列的顺序

判断多个列的一个值