Das sollte ziemlich einfach sein.
SELECT (CASE WHEN @fk <> fk_id THEN @row:=1 ELSE @row:example@sqldat.com + 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
Ich habe nach fk_id bestellt Zuerst um sicherzustellen, dass alle Ihre Fremdschlüssel zusammenkommen (was ist, wenn sie nicht wirklich in der Tabelle sind?), Dann habe ich Ihre bevorzugte Reihenfolge vorgenommen, dh nach rcv_date . Die Abfrage prüft auf eine Änderung in fk_id, und wenn es eine gibt, wird die Zeilennummer-Variable auf 1 gesetzt, oder die Variable wird inkrementiert. Es wird in der Case-Anweisung behandelt. Beachten Sie, dass @fk:=fk_id wird nach der Fallprüfung durchgeführt, sonst wirkt sich dies auf die Zeilennummer aus.
Bearbeiten: Ich habe gerade Ihre eigene Lösung bemerkt, die zufällig dieselbe war wie ich. Hut ab! :)