У меня есть таблица заказа, которая выглядит как нижеMySQL Multiple присоединяется к календарной таблице для платежей данных
order_id pre_pay_time pre_pay_amount pre_pay_type final_payment_time final_payment_amount final_payment_type
==============================================================================================================================
1 1234123413 10 1 1234123913 25 2
2 1234123414 25 1 0 100 0
3 1234123417 75 2 1234125416 155 1
4 0 0 0 1234126418 60 2
Здесь клиент может либо сделать предварительный платеж по порядку, а затем оплатить остаток в конце , или они могут просто заплатить полную сумму в конце.
Столбцы pre_pay_time и final_payment_time являются отметками времени UNIX.
То, что я пытаюсь сделать, это создать выходную таблицу, которая имеет суммы для каждого календарного дня. Для этого я присоединяюсь к календарной таблице.
В настоящее время я могу успешно выводить данные только для суммы окончательного платежа, а также суммы для оплаты наличными и карточками (на основе столбца final_payment_type) за каждый день месяца.
SELECT calendar.datefield AS DATE, IFNULL(SUM(orders.final_payment_amount) , 0) AS total_sales,
IFNULL(sum(if(final_payment_type=1,orders.final_payment_amount,0)),0)AS total_cash,
IFNULL(sum(if(final_payment_type=2,orders.final_payment_amount,0)),0)AS total_card,
count(orders.id) AS order_counter
FROM orders
RIGHT JOIN calendar ON (DATE(FROM_UNIXTIME(cast(orders.final_payment_time as signed))) = calendar.datefield)
WHERE calendar.datefield >= '2016-4-1' AND calendar.datefield <= '2016-4-31'
GROUP BY DATE
То, что я надеюсь сделать это расширить запрос, так что я также получить значение сумм за каждый день для pre_pay_amount на основе pre_pay_time. Это позволит мне рассчитать общий доход за день как комбинацию final_payment_amount и pre_pay_amount.
Поскольку предварительная оплата может быть произведена в другой день до окончательного платежа, я считаю, что мне нужно будет сделать еще один JOIN в той же таблице календаря, используя столбец pre_pay_time.
Можно ли сделать это с помощью одного запроса?
- это поле даты DATE без отметки времени на календарной таблице? – cableload
Да, calendar.datefield - ГГГГ-ММ-ДД. Вот почему мне нужно преобразовать unixtimestamps в DATE – dgj