我试图从这样一个简单的表中获取所有序列(大于1个数字)的开头和结尾:
.project
参考this website,而不是找到差距,我希望得到“开始”。并且'停止'所有序列。所以我希望得到这样的结果:
CREATE TABLE `sequence` (
`id` int(11) NOT NULL
);
INSERT INTO `sequence` (`id`) VALUES (1), (3), (4), (6), (7), (8), (10), (11), (12), (13), (15), (16), (17), (18), (19), (21), (22), (23), (24), (25), (26);
我提出了以下查询,它给出了正确的起始位置,但不是结束位置。
+-----+----+
|start|stop|
+-----+----+
| 3| 4|
| 6| 8|
| 10| 13|
| 15| 19|
| 21| 26|
+-----+----+
有人能指出我正确的方向吗?
答案 0 :(得分:1)
我找到了答案,我想与全世界分享:
SELECT
l.id AS start,
(
SELECT
MIN(a.id) AS id
FROM
sequence a
LEFT OUTER JOIN sequence b ON a.id + 1 = b.id
WHERE
b.id IS NULL
AND a.id >= l.id
) AS stop
FROM
sequence l
LEFT OUTER JOIN sequence r ON r.id + 1 = l.id
WHERE
r.id IS NULL
这也将带来“孤独者”。考虑到这一点,但可以使用stop - start != 0
轻松过滤掉它们。