Я имею дело с таблицей заказов на продажу (ORDER), которая выглядит примерно так (обновлено 2018/12/20, чтобы быть ближе к моему фактическому набору данных):
SOID SOLINEID INVOICEDATE SALESAMOUNT AC
5 1 2018-11-30 100.00 01
5 2 2018-12-05 50.00 02
4 1 2018-12-12 25.00 17
3 1 2017-12-31 75.00 03
3 2 2018-01-03 25.00 05
2 1 2017-11-25 100.00 17
2 2 2017-11-27 35.00 03
1 1 2017-11-20 15.00 08
1 2 2018-03-15 30.00 17
1 3 2018-04-03 200.00 05
Я могувычислите средние продажи по SOID и SOLINEID:
SELECT SUM(SALESAMOUNT) / COUNT(DISTINCT SOID) AS 'Total Sales per Order ($)',
SUM(SALESAMOUNT) / COUNT(SOLINEID) AS 'Total Sales per Line ($)'
FROM ORDER
Это, кажется, дает очень хороший ответ, но мне тогда дали дополнительное ограничение, что этот подсчет должен быть сделан по году и месяцу.Я думал, что мог бы просто добавить
GROUP BY YEAR(INVOICEDATE), MONTH(MONTH)
Но это агрегирует SOID, а затем выполняет COUNT (DISTINCT SOID).Это становится проблемой с SOID, которые появляются через несколько месяцев, что является довольно распространенным явлением, поскольку мы выставляем счет при отгрузке.
Я хочу получить что-то вроде этого:
Year Month Total Sales Per Order Total Sales Per Line
2018 11 0.00
Боль в большом пальце торчитзаключается в том, что мне нужен какой-то способ определить, в каком месяце и году SOID будет агрегирован, если он охватывает несколько;для этой цели я бы использовал MAX (INVOICEDATE).
Оттуда, однако, я просто не уверен, как с этим справиться.С?Подзапрос?Что-то другое?Я был бы признателен за любую помощь, даже если она просто указывала в правильном направлении.