Создание дополнительных строк даты для несуществующих данных (Redshift SQL) - PullRequest
0 голосов
/ 23 апреля 2020

Я просматриваю данные агентов и хочу создать обзор их продаж за последние 6 месяцев. У меня есть случаи, когда агенты только начинали, некоторые запускались 3 месяца go, но я хочу создать представление, в котором всегда должно быть 6 строк для каждого агента, независимо от того, когда он / он начал, просто не будет никаких продажи указаны в этих строках. Это представление важно, потому что я хочу иметь возможность усреднять значения и показывать различные детализации в какой-то момент (уровень агента, уровень команды и т. Д. c ..). Я работаю с Redshift SQL и у меня есть данные агента. Это мой запрос:

select date, id, name, team, country, sum(sales) 
from agent 
where date >= date_trunc('month', dateadd(month, -6, current_date) and date <= current_date
group by 1,2,3,4,5 
order by 1

, который дает мне вывод ниже (без зеленых строк), как я могу добавить дополнительные строки / месяцы для Романа, агентства, которое началось в феврале. Есть идеи, предложения?

enter image description here

1 Ответ

0 голосов
/ 23 апреля 2020

Предполагая, что все даты доступны в таблице (как показано в ваших образцах данных), один вариант - cross join доступные даты со списком агентов, чтобы сгенерировать все возможные комбинации, а затем привести исходную таблицу с left join:

select d.date, n.id, n.name, n.team, n.country, sum(a.sales) 
from (select distinct date from agent) d
cross join (select distinct id, name, team, country from agent) n
left join agent a on a.date = d.date and a.id = n.id
group by 1, 2, 3, 4, 5 
order by 1, 2

Предполагается, что id однозначно идентифицирует агента; в противном случае вам потребуются дополнительные условия соединения в left join (на name, team, country).

...