Столбец, показывающий совокупный рост выручки, затем повторяет максимальное значение только после определенной даты - PullRequest
0 голосов
/ 28 февраля 2020

Я создаю информационную панель, которая, помимо прочего, показывает, сколько дохода репутация получила в первый месяц своего прихода в компанию.

Это будет основано на таблице, которую я создаю с SQL. Простейшей версией этой таблицы будет:

дата (которая будет каждый день недели), имя представителя, доход, полученный при присоединении.

Это будет увеличиваться в совокупности (поэтому, когда вы выбираете дату на панели инструментов, вы видите общую сумму, созданную до этого дня).

Поскольку нас интересует только доход, полученный в В первый месяц я хочу, чтобы моя таблица доходов увеличивалась кумулятивно до тех пор, пока мы не достигнем 1 месяца с даты начала, а затем, независимо от того, что это максимальное число, будет повторяться до конца моей колонки. Таким образом, после первого месяца, любой даты, выбранной на панели инструментов, вы все равно будете видеть только номер 1 месяца. Я хочу сделать это таким образом, так как думаю, что это будет проще сделать в SQL, а не в инструменте панели инструментов, так как тогда мне придется перенести больше данных и провести там дальнейшие вычисления.

Для этого я сначала создал подзапрос:

(SELECT date, rep name, sum(revenue) as revenue
FROM rev Group BY 1,2) as a

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

Затем я запрашиваю этот подзапрос, пока присоединение к столу с указанием даты начала. Мой новый запрос начинается так:

SELECT a.date, a.rep name,

SUM(CASE WHEN (a.date- b.join_date < 1 month) then sum(a.revenue)

Я застрял на ELSE. Хочу ли я разделить здесь?

Мои мысли примерно такие:

ELSE sum(revenue) partition over(rep name, add_months(join_date, 1) order by date asc)

Но я не думаю, что это имеет большой смысл?

По сути, что Я хочу видеть, как окончательный вывод это. Чтобы таблица была короткой, я предполагаю, что хочу получить доход в первую неделю их присоединения (а не месяц, как я на самом деле хочу):

enter image description here

В этом примере я притворяюсь, что представитель начал зарабатывать деньги в первый день их присоединения, то есть 2020-02-19. В первых трех столбцах у меня есть текущий результат моего подзапроса (отдельные суммы, которые они генерировали в каждый день). Я хочу объединить это до другого запроса, который дает мне 4-й столбец. Надеюсь, это немного прояснит ситуацию!

1 Ответ

0 голосов
/ 28 февраля 2020

Как прокомментировал Фред, условное суммирование в промежуточной сумме должно быть таким, как вы хотите:

SELECT date, rep_name, sum(revenue) as revenue
  ,sum(CASE WHEN a.date <= add_months(b.join_date, 1) then sum(revenue) END) 
   over (partition by rep_name
         order by date
         rows unbounded preceding) as monthly_rev
FROM rev as a
join ...
Group BY 1,2
...