У меня есть таблица SalesInvoice. В этой Дате, Режим суммы являются важными столбцами в этой таблице.Таблица групп и подгрупп в MySQL Выберите
SNo BID iDate Amount Mode
----------------------------------------------------------------
101 1 2016-01-01 200 Cash
102 2 2016-01-01 500 Credit
103 5 2016-01-01 800 credit
104 8 2016-01-01 250 Cash
105 1 2016-01-01 200 Cash
106 2 2016-01-02 500 Cash
107 5 2016-01-03 800 Credit
108 8 2016-01-03 250 Credit
Мой Требуемый Выход
iDate MinSno MaxSno Total CreditTotal CashTotal
----------------------------------------------------------------------
2016-01-01 101 105 1950 1300 650
2016-01-02 106 106 500 0 500
2016-01-03 107 108 1050 1050 0
Я попытался MySQL Query
SELECT iDate, Min(SNo) AS MinSno, Max(SNo) AS MaxSno, SUM(Amount)
From SalesInvoice GROUP By iDate
Но я не знаю, как получить сумму наличными и кредитной суммы на основе Sub Группа в основной группе iDate. Пожалуйста, помогите мне, как достичь ожидаемой производительности, как указано выше?
'ВЫБРАТЬ Идате AS Дата, Min (SNO) AS MinSno, Макс (SNo) AS MaxSno, (CreditTotal + CashTotal) как Total, (SELECT SUM (Amount) FROM SalesInvoice, где iDate = t1.iDate и Mode = 'Credit' GROUP By iDate) Как CreditTotal, (SELECT SUM (Amount) FROM SalesInvoice, где iDate = t1.iDate и Mode = 'Cash' GROUP By iDate) Как CashTotal От SalesInvoice GROUP By iDate' –
I попробовал это, но это ухудшает производительность, потому что у меня есть 250K записей в таблице. Просьба предоставить оптимальное решение. –
Не могли бы вы добавить индекс на 'iDate' и' Mode', а затем проверить –