Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeilennummer für nach einer Spalte gruppierte Abfrageergebnisse

Das sollte ziemlich einfach sein.

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

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! :)