这可能已经在这里回答过,但我不知道如何寻找,所以我很抱歉,如果这是一个复制。我有一个带有整数列的表,它按顺序保存数字。
由于删除行,缺少了一些数字:
+-------+
| _auto |
+-------+
| 0 |
| 1 |
| 2 |
| 5 |
| 6 |
| 7 |
| 9 |
| 11 |
| 12 |
| 13 |
| 14 |
| 16 |
| 17 |
| 19 |
| 20 |
+-------+我想要的是编写SQL查询,它为我提供了一个由此列上的范围组成的表。
+----+----+
| F | T |
+----+----+
| 0 | 2 |
| 5 | 7 |
| 9 | 9 |
| 11 | 14 |
| 16 | 17 |
| 19 | 20 |
+----+----+我将在QT4::QSqlDatabase驱动程序中使用它,所以如果它能在任何兼容的数据库(ANSI )上工作,而不仅仅是PostgreSQL,那就太好了。
我相信这个算法:(1)选择行,这样就没有值为_auto+1的行;(2)相同,但auto-1;(3)合并这两个选择。
但是我不知道怎么写前两个选择。
发布于 2014-12-03 15:22:48
数字序列具有一个属性:如果从它们中减去一个序列,则结果是一个常数。以下查询使用此观察:
select min(_auto) as f, max(_auto) as t
from (select n._auto, row_number() over (order by n._auto) as seqnum
from numbers n
) n
group by (_auto - seqnum);https://stackoverflow.com/questions/27275253
复制相似问题