To powinno być całkiem proste.
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
Zamówiłem przez fk_id
najpierw, aby upewnić się, że wszystkie klucze obce są ze sobą połączone (co jeśli tak naprawdę nie ma ich w tabeli?), następnie wykonałem preferowaną kolejność, tj. według rcv_date
. Zapytanie sprawdza, czy nastąpiła zmiana w fk_id, a jeśli istnieje, to zmienna numeru wiersza jest ustawiana na 1, w przeciwnym razie zmienna jest zwiększana. Jest obsługiwane w instrukcji przypadku. Zauważ, że @fk:=fk_id
odbywa się po sprawdzeniu wielkości liter, w przeciwnym razie wpłynie to na numer wiersza.
Edytuj: Właśnie zauważyłem twoje własne rozwiązanie, które akurat było takie samo, jak ja. Sława! :)