Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Número da linha dos resultados da consulta agrupados por uma coluna


Isso deve ser bastante simples.
SELECT (CASE WHEN @fk <> fk_id THEN @row:=1 ELSE @row:[email protected] + 1 END) AS ordinality, 
       @fk:=fk_id, rcv_date
FROM   (SELECT @row:=0) AS r, 
       (SELECT @fk:=0) AS f, 
       (SELECT fk_id, rcv_date FROM files ORDER BY fk_id, rcv_date) AS t

Encomendei por fk_id primeiro para garantir que todas as suas chaves estrangeiras se juntem (e se elas não estiverem realmente na tabela?), então fiz sua ordenação preferida, ou seja, por rcv_date . A consulta verifica se há uma alteração no fk_id e, se houver, a variável do número da linha é definida como 1 ou a variável é incrementada. É tratado na instrução case. Observe que @fk:=fk_id é feito após a verificação do caso, senão afetará o número da linha.

Editar: Acabei de notar sua própria solução, que por acaso era a mesma que acabei com. Parabéns! :)