Dovrebbe essere abbastanza semplice.
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
Ho ordinato tramite fk_id
prima per assicurarmi che tutte le tue chiavi esterne si uniscano (e se non fossero davvero nella tabella?), poi ho eseguito l'ordine preferito, ovvero per rcv_date
. La query verifica la presenza di una modifica in fk_id e, se ce n'è una, la variabile del numero di riga viene impostata su 1, oppure la variabile viene incrementata. È gestito in caso di dichiarazione. Nota che @fk:=fk_id
viene eseguito dopo il controllo del caso, altrimenti influirà sul numero di riga.
Modifica: Ho appena notato la tua soluzione che è stata la stessa che ho trovato io. Complimenti! :)