Ini seharusnya cukup mudah.
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
Saya memesan dengan fk_id
pertama untuk memastikan semua kunci asing Anda bersatu (bagaimana jika mereka tidak benar-benar ada di tabel?), maka saya melakukan pemesanan pilihan Anda, yaitu dengan rcv_date
. Kueri memeriksa perubahan dalam fk_id dan jika ada, maka variabel nomor baris diatur ke 1, atau variabel tersebut bertambah. Ini ditangani dalam pernyataan kasus. Perhatikan bahwa @fk:=fk_id
dilakukan setelah pemeriksaan kasus lain itu akan mempengaruhi nomor baris.
Sunting: Perhatikan saja solusi Anda sendiri yang kebetulan sama dengan yang saya dapatkan. Pujian! :)