Dit zou vrij eenvoudig moeten zijn.
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
Ik heb besteld op fk_id
eerst om ervoor te zorgen dat al uw buitenlandse sleutels bij elkaar komen (wat als ze niet echt in de tabel staan?), daarna heb ik uw gewenste bestelling gedaan, dwz vóór rcv_date
. De query controleert op een wijziging in fk_id en als die er is, wordt de rijnummervariabele ingesteld op 1, of anders wordt de variabele verhoogd. Het wordt behandeld in case-statement. Merk op dat @fk:=fk_id
wordt gedaan na het controleren van de hoofdletters, anders heeft dit invloed op het rijnummer.
Bewerken: Ik heb zojuist je eigen oplossing opgemerkt die toevallig dezelfde was als waarmee ik eindigde. Hulde! :)