Say, I\'ve a table like this:
I want to find the pair of Centers whose Performance difference is highest for each session, like this:
I have th
Use row_number():
select session, center1, center2, performance
from (select t1.center as center1, t2.center as center2,
(t1.performance - t2.performance) as performance,
row_number() over (partition by t1.session order by (t1.performance - t2.performance) desc) as seqnum
from mytable t1 join
mytable t2
on t1.session = t2.session
where seqnum = 1;
Or for better performance. The maximum difference is the maximum minus the minimum. You want the centers, here is a method without subqueries:
select session,
max(case when seqnum_desc = 1 then center end) as center1,
max(case when seqnum_asc = 1 then center end) as center2,
max(performance) - min(performance)
from (select t.*,
row_number() over (partition by session order by performance) as seqnum_asc,
row_number() over (partition by session order by performance desc) as seqnum_desc
from mytable t
where 1 in (seqnum_asc, seqnum_desc)
group by session