Това трябва да е доста ясно.
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
Поръчах чрез fk_id
първо, за да гарантирам, че всичките ви външни ключове се събират (ами ако те наистина не са в таблицата?), след това направих предпочитаното от вас подреждане, т.е. до rcv_date
. Заявката проверява за промяна в fk_id и ако има такава, тогава променливата номер на ред е зададена на 1 или в противен случай променливата се увеличава. Обработва се в извлечение за случай. Забележете, че @fk:=fk_id
се извършва след проверка на регистъра, в противен случай ще се отрази на номера на реда.
Редактиране: Току-що забелязах вашето собствено решение, което се оказа същото като моето. Браво! :)