Мои данные выглядят так:
Table Name = sales_orders
Customer_id| Order_id| Item_Id
-------------------------------
1 | 1 | 10
1 | 1 | 24
1 | 1 | 37
1 | 2 | 11
1 | 2 | 15
1 | 3 | 28
2 | 4 | 37
4 | 6 | 10
2 | 7 | 10
Однако мне нужно, чтобы они выглядели так:
Customer_id| Order_id| Item_Id |Order_rank
------------------------------------------
1 | 1 | 10 | 1
1 | 1 | 24 | 1
1 | 1 | 37 | 1
1 | 2 | 11 | 2
1 | 2 | 15 | 2
1 | 3 | 28 | 3
2 | 4 | 37 | 1
4 | 6 | 10 | 1
2 | 7 | 10 | 2
Customer_Id - уникальный человек
Order_id isуникальный заказ
item_id - это код продукта
Для дальнейшего объяснения, первые три строки относятся к первому заказу клиента № 1 (order_id = 1), где этот человек заказал 3 разных товара (10,24 и 37).Затем они приобрели другой заказ (order_id = 2) с двумя другими продуктами.У человека с customer_id = 2 есть 2 уникальных заказа (4 и 6), в то время как у клиента с идентификатором '4' есть один уникальный заказ (order_id = 6)
По сути, мне нужно ранжировать эти заказы по customer_idи идентификатор заказа, так что я могу сказать: «Order_id = 7 - это второй заказ для customer_id = 2, потому что Order_rank = 2»
Проблема в том, что я не могу использовать переменные сеанса (например, @grp:= customer_id) в запросе MySQL
Например, такой запрос НЕ разрешен:
SELECT
customer_id,
order_id,
@ss := CASE WHEN @grp = customer_id THEN @ss + 1 ELSE 1 END AS
order_rank,
@grp := customer_id
FROM
(
SELECT
customer_id,
order_id
FROM sales_orders
GROUP BY customer_id, order_id
ORDER BY customer_id, order_id ASC
) AS t_1
CROSS JOIN (SELECT @ss := 0, @grp = NULL)ss
ORDER BY customer_id asc
Спасибо за помощь!