У меня есть таблица с датой и несколькими значениями, которые я группирую и некоторые из которых я агрегирую, запрос будет как получить доход от клиента на прошлой неделе. Теперь я хочу увидеть изменение между запрошенным периодом и предыдущим, так что у меня будет 2 столбца дохода и previous_revenue.Агрегированные значения в зависимости от другого поля
Прямо сейчас я запрашиваю строки запрошенного периода плюс строки предыдущего периода, и для каждого агрегированного поля я добавляю оператор case, внутри которого возвращают значение или 0, если не в том периоде, который я хочу.
Это приводит к тому, что столько CASE, как агрегированные поля, но всегда с тем же условным выражением.
мне интересно, если есть лучший дизайн для этого случая использования ...
SELECT
customer,
SUM(
CASE TIMESTAMP_CMP('2016-07-01 00:00:00', ft.date) > 0 WHEN true THEN
REVENUE
ELSE 0 END
) AS revenue,
SUM(
CASE TIMESTAMP_CMP('2016-07-01 00:00:00', ft.date) < 0 WHEN true THEN
REVENUE
ELSE 0 END
) AS previous_revenue
WHERE date_hour >= '2016-06-01 00:00:00'
AND date_hour <= '2016-07-31 23:59:59'
GROUP BY customer
(В моем реальном случае использования у меня есть много столбцов, которые делают его еще более некрасиво)