To by mělo být docela jednoduché.
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
Objednal jsem podle fk_id
nejprve jsem se ujistil, že všechny vaše cizí klíče jsou pohromadě (co když opravdu nejsou v tabulce?), pak jsem provedl vaši preferovanou objednávku, tj. do rcv_date
. Dotaz kontroluje změnu fk_id, a pokud existuje, pak se proměnná čísla řádku nastaví na 1, nebo se proměnná zvýší. Řeší se v případě prohlášení. Všimněte si, že @fk:=fk_id
se provádí po kontrole velikosti písmen, jinak to ovlivní číslo řádku.
Upravit: Právě jsem si všiml vašeho vlastního řešení, které bylo náhodou stejné jako já. Sláva! :)