Esto debería ser bastante sencillo.
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
Pedí por fk_id
primero para asegurarme de que todas sus claves foráneas se juntan (¿y si no están realmente en la tabla?), luego hice su pedido preferido, es decir, por rcv_date
. La consulta busca un cambio en fk_id y, si lo hay, la variable de número de fila se establece en 1 o, de lo contrario, la variable se incrementa. Se maneja en la declaración del caso. Observe que @fk:=fk_id
se realiza después de verificar el caso; de lo contrario, afectará el número de fila.
Editar: Acabo de notar su propia solución, que resultó ser la misma que terminé. ¡Prestigio! :)