Sunday, 15 May 2011

sql - Grouping similar sequence of records keeping order -



sql - Grouping similar sequence of records keeping order -

i have table:

day point deltatime order 8 5 2 1 8 7 1 2 8 3 4 3 8 2 2 4 9 5 2 1 9 7 2 2 9 3 3 3 9 2 2 4 5 5 2 1 5 7 1 2 5 3 4 3 5 2 2 4 3 5 2 1 3 7 2 2 3 3 3 3 3 2 2 4

i need (efficient) oracle query obtain (possibly without declaring functions):

dayaggr point deltatime order 8,5 5 2 1 8,5 7 1 2 8,5 3 4 3 8,5 2 2 4 9,3 5 2 1 9,3 7 2 2 9,3 3 3 3 9,3 2 2 4

so: need aggregate days based upon identical sequences of records, keeping order. solutions using listagg preferred. in advance.

like this:

sql> select listagg(d.day,',') within group(order 1) days, point, deltatime, ordr 2 info d 3 inner bring together (select day, listagg(point||':'||deltatime||':'||ordr,',') within grouping (order ordr) grp 4 info 5 grouping day) grp 6 on grp.day = d.day 7 grouping point, deltatime, ordr, grp 8 order days desc, ordr; days point deltatime ordr ---------- ---------- ---------- ---------- 5,8 5 2 1 5,8 7 1 2 5,8 3 4 3 5,8 2 2 4 3,9 5 2 1 3,9 7 2 2 3,9 3 3 3 3,9 2 2 4 8 rows selected.

there's no reliable way given info "keep order" if you're refering "days" i've ordered days desc

fiddle: http://sqlfiddle.com/#!4/3ea17/2

sql oracle group-by order sequence

No comments:

Post a Comment