その part_id の build_steps の MAX 値に基づいて、order_id に関連付けられている各 part_id のランクを含むランキング列を作成する必要があります。新しい order_id が繰り返されるたびに、ランクを再開する必要があります。
次のフィドルがありますが、ランクが適切に作成されていません。
http://sqlfiddle.com/#!9/63d47/29
以下は私のクエリです
SET @current_rank = 0;
SET @prevOrder = null;
SELECT part_id, MAX(build_steps) AS max_build_steps,
@current_rank:= CASE WHEN @prevOrder = order_id
THEN @current_rank:=@current_rank +1
ELSE @current_rank:=1 END rank,
@prevOrder:= order_id as 'order_id'
FROM orders,
(SELECT @current_rank:=0) r
GROUP BY order_id, part_id
ORDER BY order_id desc, max_build_steps desc;
テーブル:
CREATE TABLE orders
(`part_id` int, `build_steps` int, `order_id` int)
;
INSERT INTO orders
(`part_id`, `build_steps`, `order_id`)
VALUES
(234554, 1, 1234),
(234554, 2, 1234),
(234554, 3, 1234),
(234554, 4, 1234),
(234554, 5, 1234),
(234554, 6, 1234),
(234554, 7, 1234),
(234554, 8, 1234),
(234555, 1, 1234),
(234555, 2, 1234),
(234556, 1, 1234),
(234556, 2, 1234),
(234556, 3, 1234),
(234557, 1, 1234),
(234566, 1, 5678),
(234566, 2, 5678),
(234566, 3, 5678),
(234566, 4, 5678),
(234566, 5, 5678),
(234567, 1, 5678),
(234567, 2, 5678),
(234568, 1, 5678),
(234569, 1, 5678)
;
期待される結果:
part_id, max_build_steps, rank, order_id
234566 5 1 5678
234567 2 2 5678
234568 1 3 5678
234569 1 4 5678
234554 8 1 1234
234556 3 2 1234
234555 2 3 1234
234557 1 4 1234
現在のクエリ結果:
part_id max_build_steps rank order_id
234566 5 1 5678
234567 2 2 5678
234568 1 3 5678
234569 1 4 5678
234554 8 1 1234
234556 3 3 1234
234555 2 2 1234
234557 1 4 1234