Cela devrait être assez simple.
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
J'ai commandé par fk_id
d'abord pour m'assurer que toutes vos clés étrangères se rejoignent (et si elles ne sont pas vraiment dans la table ?), puis j'ai fait votre ordre préféré, c'est-à-dire par rcv_date
. La requête recherche un changement dans fk_id et s'il y en a un, la variable de numéro de ligne est définie sur 1, sinon la variable est incrémentée. Il est géré dans une instruction case. Notez que @fk:=fk_id
est fait après la vérification de la casse, sinon cela affectera le numéro de ligne.
Modifier : Je viens de remarquer votre propre solution qui s'est avérée être la même que celle avec laquelle je me suis retrouvé. Gloire! :)