MySQL-将行与下N个较小的行连接

MySQL-将行与下N个较小的行连接,mysql,Mysql,我有一张桌子: id timestamp 1 1 23 2 12 4 45 6 3 7 4 8 我需要这个结果: major minor 1 2 1 4 1 6 2 4 2 6 2 7 我需要把每一个数字和后面3个最小的数字连接起来。因为这些数字是按顺序插入的,所以我不能使用ID 因为这些数字也不是固定的间隔,所以我无法设置特定的限制来查找要加入的最大数字 我有: 我可以

我有一张桌子:

id    timestamp
1      1
23     2
12     4
45     6
3      7
4      8
我需要这个结果:

major  minor
1      2
1      4
1      6
2      4
2      6
2      7
我需要把每一个数字和后面3个最小的数字连接起来。因为这些数字是按顺序插入的,所以我不能使用ID

因为这些数字也不是固定的间隔,所以我无法设置特定的限制来查找要加入的最大数字

我有:

我可以创建一个临时表并使用一个自动递增id来完成这项工作

我可以对单个数字执行此操作,并编写一个脚本来遍历该表。这是对它的查询,现在继续,直到出现更好的结果:


这里有一个可能的解决方案,看看这个来摆弄它

SELECT *
FROM mytable major inner join mytable minor
 ON minor.timestamp > major.timestamp
WHERE (SELECT COUNT(*) FROM mytable m WHERE m.timestamp < minor.timestamp and m.timestamp > major.timestamp) < 3
ORDER BY major.timestamp, minor.timestamp
我肯定不相信这是最干净的解决方案,我也没有做任何事情来处理相同时间戳的领带,但它确实做了你想要的事情,所以它至少可以作为构建的基础


我所做的就是加入表格,然后计算主修和辅修之间的行数,这样我就不会得到太多的行数。

请看:到目前为止,您都尝试了什么????所以这不是一个免费的编码服务。正如我所说,我有解决方案,正如我在帖子中所说的。我在脑海中描绘它,试图找到另一种方式。我刚刚得到了一些查询,所以我也将添加它们。为什么遵循3个简单的说明如此困难?这非常好!我从来没有想过要在where里放一个count。我花了一点时间来理解逻辑,但这很好。谢谢。
CREATE TABLE `timestamps` (
 `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
 `interval_id` tinyint(3) unsigned NOT NULL,
 `timestamp` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `interval_timestamp` (`interval_id`,`timestamp`),
 KEY `interval_id` (`interval_id`),
 KEY `timestamp` (`timestamp`),
 CONSTRAINT `timestamps_ibfk_1` FOREIGN KEY (`interval_id`) REFERENCES `intervals` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=75157 DEFAULT CHARSET=latin1
SELECT *
FROM mytable major inner join mytable minor
 ON minor.timestamp > major.timestamp
WHERE (SELECT COUNT(*) FROM mytable m WHERE m.timestamp < minor.timestamp and m.timestamp > major.timestamp) < 3
ORDER BY major.timestamp, minor.timestamp