Может ли что-то подобное сделать?
SELECT
customer_id,
sum(order_total),
(SELECT referral_code
FROM order o
WHERE o.customer_id = order.customer_id
ORDER BY date_created
LIMIT 1) AS customers_referral_code
FROM order
GROUP BY customer_id, customers_referral_code
ORDER BY date_created
Это не требует, чтобы вы поддерживали предложение WHERE в двух местах и сохранял значимость порядка, но получилось бы довольно странно, если бы вам понадобились "десятки полей", например, referral_code. Это также довольно медленно (по крайней мере, на MySQL).
Для меня это звучит как referral_code
, а десятки полей должны быть в таблице клиентов, а не в таблице заказов, поскольку они логически связаны 1: 1 с клиентом, а не с заказом. Перемещение их туда сделало бы запрос НАМНОГО проще.
Это также может помочь:
SELECT
o.customer_id,
sum(o.order_total),
c.referral_code, c.x, c.y, c.z
FROM order o LEFT JOIN (
SELECT referral_code, x, y, z
FROM orders c
WHERE c.customer_id = o.customer_id
ORDER BY c.date_created
LIMIT 1
) AS c
GROUP BY o.customer_id, c.referral_code
ORDER BY o.date_created