[英]SQL query to extract ranges from table of integers
以前可能已經在這里回答了這個問題,但是我不知道如何搜索它,因此我很抱歉如果重復的話。 我有一個帶有整數列的表,該表按順序保存數字。
由於刪除了行,一些數字丟失了:
+-------+
| _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 SQL)上運行,而不僅僅是PostgreSQL,那將是很好的選擇。
我相信這種算法:(1)選擇行,這樣就沒有值_auto + 1的行; (2)相同,但_auto-1 ; (3)結合這兩個選擇。
但是我不知道如何編寫前兩個選擇。
數字序列具有一個屬性:如果從數字序列中減去一個序列,則結果是常數。 以下查詢使用此觀察結果:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.