i having difficulty returning first row following query. trying return lowest value in result column particular event works fine returns other rows, want one. best way achieve this?
select e.event_id, e.event_type, e.event_name, m.member_id, m.member_firstname, m.member_lastname, (select min(result) rank) event e join rank r on e.event_id = r.event_id join member m on m.member_id = r.member_id e.event_id = 'event001' order result;
the subquery in solution below copied , pasted original post, didn't test (obviously since didn't have tables), except field: row_number() on .... instead of min(result...)
this assigns row in each "partition" using ordering indicated (notice desc), , in outer query select rows row_number equals 1.
select event_id, event_type, event_name, member_id, member_firstname, member_lastname, result ( select e.event_id, e.event_type, e.event_name, m.member_id, m.member_firstname, m.member_lastname, r.result, row_number() on (partition e.event_id order r.result) rn event e join rank r on e.event_id = r.event_id join member m on m.member_id = r.member_id e.event_id = 'event001' ) rn = 1;
this assumes want return 1 row, if there tie lowest score. if there ties, row selected undetermined (at least solution; add more clauses in order by). if in case of ties want tied members listed, can use dense_rank()
instead of row_number()
.
Comments
Post a Comment