Obter registros com maior / menor <tudo> por grupo

Como fazer isso

título @Former desta pergunta era "using rank (@Rank: = @Rank + 1) em consultas complexas com subconsultas - funcionará? "porque eu estava procurando uma solução usando classificações, mas agora vejo que a solução postada por Bill é muito melhor.

Pergunta original:

Estou tentando compor uma consulta que levaria o último registro de cada grupo, dada uma ordem definida:

SET @Rank=0;

select s.*
from (select GroupId, max(Rank) AS MaxRank
      from (select GroupId, @Rank := @Rank + 1 AS Rank 
            from Table
            order by OrderField
            ) as t
      group by GroupId) as t 
  join (
      select *, @Rank := @Rank + 1 AS Rank
      from Table
      order by OrderField
      ) as s 
  on t.GroupId = s.GroupId and t.MaxRank = s.Rank
order by OrderField

Expression@Rank := @Rank + 1 normalmente é usado para classificação, mas para mim parece suspeito quando usado em duas subconsultas, mas inicializado apenas uma vez. Funcionará assim?

E segundo, ele funcionará com uma subconsulta avaliada várias vezes? Como a subconsulta na cláusula where (ou having) (outra maneira de escrever o acima):

SET @Rank=0;

select Table.*, @Rank := @Rank + 1 AS Rank
from Table
having Rank = (select max(Rank) AS MaxRank
              from (select GroupId, @Rank := @Rank + 1 AS Rank 
                    from Table as t0
                    order by OrderField
                    ) as t
              where t.GroupId = table.GroupId
             )
order by OrderField

Desde já, obrigado

questionAnswers(1)

yourAnswerToTheQuestion