Dette burde være ret ligetil.
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
Jeg bestilte efter fk_id
først for at sikre, at alle dine fremmednøgler kommer sammen (hvad nu hvis de ikke rigtig er i tabellen?), så lavede jeg din foretrukne bestilling, dvs. inden rcv_date
. Forespørgslen tjekker for en ændring i fk_id, og hvis der er en, sættes rækkenummervariabelen til 1, ellers øges variablen. Det behandles i sagsfremstilling. Bemærk at @fk:=fk_id
udføres efter sagskontrollen, ellers vil det påvirke rækkenummeret.
Rediger: Har lige lagt mærke til din egen løsning, som tilfældigvis var den samme, som jeg endte med. Tak! :)