我的 Temp_table 的 Phone_number 列中的数据如下所示
1234560200
1234560201
1234560202
2264540300
2264540301
2264540302
2264540303
2264540304
2264540305
2264540306
我希望它找到最后 4 位数字的序列,并找到它的序列的第一个和最后一个数字。例如。
前 3 行的顺序为 0200, 0201, 0202,因此 First = 0200,Last = 0202
此查询的最终输出应该是
First Last
0200 0202
0300 0306
我尝试了以下查询,但不确定这种方法。
WITH get_nxt_range AS
(
select substr(a.PHONE_NUMBER,7,4) range1,
LEAD(substr(a.PHONE_NUMBER,7,4)) OVER (ORDER BY a.PHONE_NUMBER ) nxt_range
from Temp_table a
)
SELECT range1,nxt_range FROM get_nxt_range
WHERE nxt_range = range1 +1
ORDER BY range1
最佳答案
获取序列的一种方法是使用行号差异方法。这也适用于您的情况:
select substr(phone_number, 1, 6),
min(substr(phone_number, 7, 4)), max(substr(phone_number, 7, 4))
from (select t.*,
(row_number() over (order by phone_number) -
row_number() over (partition by substr(phone_number, 1, 6) order by phone_number)
) as grp
from temp_table t
) t
group by substr(phone_number, 1, 6), grp;
关于sql - 查找数据中的序列并按其分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35505309/