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! :)