Сравнение ежемесячных продаж mysql

У меня есть 1 таблица:

 id | year |  quarter  |  month | brand  | sku | total_unit_sales 
 -----------------------------------------------------------------
 1  | 2010 |  1        |  Jan   | Toyota | 123 | 156 
 2  | 2010 |  1        |  Jan   | Toyota | 124 | 77
 3  | 2010 |  1        |  Jan   | Toyota | 125 | 325
 4  | 2010 |  1        |  Feb   | Toyota | 123 | 184 
 5  | 2010 |  1        |  Feb   | Toyota | 124 | 98
 6  | 2010 |  1        |  Feb   | Toyota | 125 | 219 
 7  | 2010 |  1        |  Mar   | Toyota | 123 | 178 
 8  | 2010 |  1        |  Mar   | Toyota | 124 | 101
 9  | 2010 |  1        |  Mar   | Toyota | 125 | 215 
 10 | 2010 |  1        |  Apr   | Toyota | 123 | 216 
 11 | 2010 |  1        |  Apr   | Toyota | 124 | 115
 12 | 2010 |  1        |  Apr   | Toyota | 125 | 278 

Мне нужно создать дельта-индексы (процент изменения одного периода времени к другому периоду) по продажам по брендам, месяцам, годам. Эти индексы представляют собой среднее изменение за последние 12 месяцев, изменение в текущем квартале, последний месяц по сравнению с предыдущим месяцем.

Однажды я добился этого многоэтапным способом, создав множество сводных таблиц, а затем сгенерировав нужный отчет. Однако это был настраиваемый вручную процесс. Теперь мне нужен полностью автоматизированный способ обновления источника данных и создания отчета.

Я работал над самостоятельным соединением, однако результаты менее чем желательны, имея в виду, что можно сравнить предыдущую цену с самой новой ценой путем самостоятельного присоединения к таблице с помощью:

left join on a.id=b.id+1

Это подвержено ошибкам из-за того, что за некоторые месяцы не собираются данные о продажах некоторых конкретных артикулов, не проданных в этом месяце.

Я ценю вашу помощь. Заранее спасибо. MySQL версии 5.5+


person digitai    schedule 11.04.2014    source источник


Ответы (1)


Ваш подход к присоединению звучит как правильный способ продолжить. Вы можете улучшить качество своих фигур, используя outer join и IFNULL() для создания разумных значений.

person Chrisky    schedule 11.04.2014
comment
Да, действительно, я могу оценить дельту (a.total_unit_sales-ifnull(b.total_unit_sales,0)). Однако моя проблема связана со способом самостоятельного присоединения к таблице, чтобы иметь возможность производить вычисления. - person digitai; 12.04.2014