对递增 1 的连续行进行分组
Group consecutive rows that are incremented by 1
这是我的数据:
FirstKey SecondKey Sequence
A1 B1 10001
A1 B1 10002
A1 B1 10003
A1 B1 10004
A1 B2 10001
A1 B2 10003
A1 B2 10005
A1 B3 10001
A1 B3 10002
A1 B3 10003
A2 B4 20001
A2 B5 20002
A2 B5 20003
A2 B6 20004
我尝试输出以下结果:
FirstKey SecondKey StartSequence EndSequence
A1 B1 10001 10004
A1 B2 10001 10001
A1 B2 10003 10003
A1 B2 10005 10005
A1 B3 10001 10003
A2 B4 20001 20001
A2 B5 20002 20003
A2 B6 20004 20004
序列是整数,不是 varchar。我希望使用相同键(FirstKey、SecondKey)彼此跟随的序列出现在同一行上。我的结果是按 FirstKey, SecondKey, Sequence 排序的
有谁知道在 SQL 中输出这个的解决方案(我是 运行 Sybase 12.5)
一个常见的解决方案是利用 ROW_NUMBER 以及序列中存在间隙的事实:
select FirstKey,
SecondKey,
min(Sequence),
max(Sequence)
from
(
select FirstKey,
SecondKey,
Sequence,
-- meaningless value, but the same for sequential rows
Sequence -
row_number() over (partition by FirstKey, SecondKey order by Sequence) as grp
from tab
) dt
group by
FirstKey,
SecondKey,
grp
这是我的数据:
FirstKey SecondKey Sequence
A1 B1 10001
A1 B1 10002
A1 B1 10003
A1 B1 10004
A1 B2 10001
A1 B2 10003
A1 B2 10005
A1 B3 10001
A1 B3 10002
A1 B3 10003
A2 B4 20001
A2 B5 20002
A2 B5 20003
A2 B6 20004
我尝试输出以下结果:
FirstKey SecondKey StartSequence EndSequence
A1 B1 10001 10004
A1 B2 10001 10001
A1 B2 10003 10003
A1 B2 10005 10005
A1 B3 10001 10003
A2 B4 20001 20001
A2 B5 20002 20003
A2 B6 20004 20004
序列是整数,不是 varchar。我希望使用相同键(FirstKey、SecondKey)彼此跟随的序列出现在同一行上。我的结果是按 FirstKey, SecondKey, Sequence 排序的 有谁知道在 SQL 中输出这个的解决方案(我是 运行 Sybase 12.5)
一个常见的解决方案是利用 ROW_NUMBER 以及序列中存在间隙的事实:
select FirstKey,
SecondKey,
min(Sequence),
max(Sequence)
from
(
select FirstKey,
SecondKey,
Sequence,
-- meaningless value, but the same for sequential rows
Sequence -
row_number() over (partition by FirstKey, SecondKey order by Sequence) as grp
from tab
) dt
group by
FirstKey,
SecondKey,
grp