Assume we have this table: ( each object can have an instance multiple times but with different timings for example object A has two instances of 1)
x
object | instance | time
-----------------------------
A | 1 | 100
A | 1 | 99
A | 5 | 5
A | 5 | 3
A | 5 | 4
A | 3 | 10
B | 9 | 17
B | 9 | 18
B | 2 | 20
I want to order this table so that the objects are ordered in a round robin way but all the rows with the same instance should come together ordered by time)
The result should be:
object | instance | time
-----------------------------
A | 5 | 3
A | 5 | 4
A | 5 | 5
B | 9 | 17
B | 9 | 18
A | 3 | 10
B | 2 | 20
A | 1 | 99
A | 1 | 100
Advertisement
Answer
Try this:
with cte as
(select distinct on (object, instance) object,
instance,
rank() over (partition by object order by time)
from example order by object, instance, time
)
select
t1.*
from
example t1
left join cte t2 on t1.object=t2.object and t1.instance=t2.instance
order by t2.rank,t1.object,t1.time