问题
Here are my datas :
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
I try to output the following result:
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
Sequence is an integer, not a varchar. I want sequences that follow each other with the same key (FirstKey, SecondKey) to appear on the same row. My result is ordered by FirstKey, SecondKey, Sequence Does anyone know a solution to output this in SQL (I'm running with Sybase 12.5)
回答1:
A common solution utilizes a ROW_NUMBER and the fact that there are gaps in your sequence:
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
来源:https://stackoverflow.com/questions/32991863/group-consecutive-rows-that-are-incremented-by-1