所有序列的开始和结束

时间:2016-07-22 10:16:37

标签: mysql

我试图从这样一个简单的表中获取所有序列(大于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|
+-----+----+

有人能指出我正确的方向吗?

1 个答案:

答案 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轻松过滤掉它们。