Я хочу выполнить некоторые математические операции с предыдущими строками в запросе SQL, чтобы избежать этого в моем коде.
У меня есть таблица, показывающая продажи двух компаний (представленные здесь данные не имеют особого смысла, а всего лишь отрывок):
YEAR ID SALES PURCHASE MARGIN
2009 1 10796820,57 2662369,19 8134451,38
2009 2 2472271,53 2066312,34 405959,19
2008 1 9641213,19 1223606,68 8417606,51
2008 2 3436363,86 2730035,19 706328,67
Я хочу знать, как изменились продажи, покупка, маржа ... и сравнить один год с предыдущим.
Короче говоря, я хочу получить результат SQL с предварительно вычисленными эволюциями:
YEAR ID SALES SALES_EVOLUTION PURCHASE PURCHASE_EVOLUTION MARGIN MARGIN_EVOLUTION
2009 1 10796820,57 11,99 2662369,19 117,58 8134451,38 -3,36
2009 2 2472271,53 -28,06 2066312,34 -24,31 405959,19 -42,53
2008 1 9641213,19 1223606,68 8417606,51
2008 2 3436363,86 2730035,19 706328,67
Я мог бы сделать некоторые уродливые вещи:
SELECT *, YEAR, ID, SALES , (SALES/(SELECT SALES FROM TABLE WHERE YEAR = OUTER_TABLE.YEAR-1 AND ID = OUTER_TABLE.ID) -1)*100 as SALES_EVOLUTION (...)
FROM TABLE as OUTER_TABLE
ORDER BY YEAR DESC, ID ASC
Но у меня есть около 20 полей, для которых мне нужно будет выполнить вложенный запрос, что означает, что у меня будет очень большой и ужасный запрос.
Есть ли лучший способ сделать это с меньшим количеством SQL?