у меня есть 2 таблицы, первая таблица - это order_buyer, в котором в качестве покупателя содержится идентификатор_покупателя , * в качестве транзакции - идентификатор (таким образом, покупатель может иметь более 1 идентификатора, потому что он, вероятно, имел больше чем 1 транзакция на 1 покупателя), и созданный при как дата транзакции. 2-я таблица - это order_match, который я хочу принять order_status_id в качестве статуса транзакции, если статус (4, 5, 6, 8), то транзакция одобрена.
на этом случай, когда я хочу узнать среднее значение транзакции для каждого покупателя за месяц, но не включил нового покупателя, у которого была транзакция в этом месяце
пример: данные за январь содержат среднее значение транзакции для покупателя, у которого была транзакция в январе но они совершают транзакцию до января, но не включают нового покупателя в январе.
пример: так, если A совершает транзакцию в декабре 2018 года и январе 2019 года, B выполняет транзакцию только в январе 2019 года (новый покупатель) и C делая транзакцию в сентябре 2018 года и январе 2019 года, когда я хочу посчитать среднестатистического покупателя до транзакции января 2019 года, я просто подсчитываю среднее значение покупателя А и C, потому что этот покупатель не является новым покупателем в январе 2019 года.
Я пробовал с этим синтаксисом, но я не знаю, почему мой синтаксис равен 0, когда я проверяю это не 0
SELECT month(createdat), year(createdat), count(buyer_id), count(id), count(id)/count(buyer_id) from (
SELECT
b.buyer_id, b. createdat, b.id
FROM
order_match d,
order_buyer b
WHERE
d.order_buyer_id = b.id
AND d.order_status_id IN (4 , 5, 6, 8)
AND NOT EXISTS( SELECT
1
FROM
order_match c,
order_buyer bb
WHERE
c.order_buyer_id = bb.id
AND bb.buyer_id = b.buyer_id
AND bb.createdAt >= b.createdAt
AND c.order_status_id IN (4 , 5, 6, 8))) z
group by month(createdat), year(createdat) order by 2 asc, 1 asc;