sql - numbering partitions based on changing dimensions -


i'm having trouble creating right partitions within data. here's example of data looks like, complete desired output:

customer   contract   type1   type2   partition 100        1                      1 100        2                      1 100        3                b       2 100        4                b       2 100        5                b       2 100        6                      3 100        7                      3 100        8          c             4 100        9          c             4 

the variable i'm trying construct last one, called partition. problem have now, when using dense_rank, contracts 1 , 2 grouped contracts 6 , 7:

select   t1.* , dense_rank() on (order customer, type1, type2) partition table1 t1 

what can use generate desired output (on large dataset)?

if understand correctly, want adjacent groups of rows, "adjacent" based on contract.

you can using difference of row_number() values. difference constant, when values adjacent. result provide additional grouping column provides information need:

select t1.*,        dense_rank() on (order customer, type1, type2, grp) partition (select t1.*,              (row_number() on (partition customer order contract) -               row_number() on (partition customer, type1, type2 order contract)              ) grp       table1 t1      ) t1; 

Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

Nuget pack csproj using nuspec -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -