Как самостоятельно присоединиться к расчету даты и другим полям в Redshift - PullRequest
0 голосов
/ 01 января 2019

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

Например, если бы у нас было

date      |num|
----------|---|
2017-01-01|300|
2017-01-02|301|
2017-01-03|302|
2017-01-04|303|
2017-01-05|304|
2017-01-06|305|
2017-01-07|306|
2017-01-08|307|
2017-01-09|308|
2017-01-10|309|
...
2018-01-01|501|
2018-01-02|502|
2018-01-03|503|
2018-01-04|504|
2018-01-05|505|
2018-01-06|506|
2018-01-07|507|
2018-01-08|508|
2018-01-09|509|
2018-01-10|510|
...

Тогда я бы хотел, чтобы результат был

date      |num| date      |num|
----------|---| ----------|---|
2017-01-01|300| null      |null|
2017-01-02|301| null      |null|
2017-01-03|302| null      |null|
2017-01-04|303| null      |null|
2017-01-05|304| null      |null|
2017-01-06|305| null      |null|
2017-01-07|306| null      |null|
2017-01-08|307| null      |null|
2017-01-09|308| null      |null|
2017-01-10|309| null      |null|
...
2018-01-01|501| 2017-01-02|301|
2018-01-02|502| 2017-01-03|302|
2018-01-03|503| 2017-01-04|303|
2018-01-04|504| 2017-01-05|304|
2018-01-05|505| 2017-01-06|305|
2018-01-06|506| 2017-01-07|306|
2018-01-07|507| 2017-01-08|307|
2018-01-08|508| 2017-01-09|308|
2018-01-09|509| 2017-01-10|309|
2018-01-10|510| 2017-01-11|...|

То, что я получил до сих пор

select

a.date          as date1
,a.source       as source1
,a.operator     as operator1
,a.route        as route1
,a.sum          as bookings1

,b.date         as date2
,b.source       as source2
,b.operator     as operator2
,b.route        as route2
,b.sum          as bookings2

from

(select 
date
,source
,operator
,route
,sum(record_count)
from booking
where transaction_date >= dateadd(year, -2, current_date)
group by 1,2,3,4) a

full outer join

(select 
date
,source
,operator
,route
,sum(record_count)
from booking
where date between dateadd(year, -3, current_date) and dateadd(year, -1, current_date)
group by 1,2,3,4) b

on

b.date                          = dateadd(day, 1, dateadd(year, -1, a.date))
and a.source                    = b.source
and a.outbound_operator_name    = b.outbound_operator_name
and a.outbound_route_name       = b.outbound_route_name

;

Проблема с вышеуказанным запросом состоит в том, что он показывает правильные результаты 2018 года, но не правильные результаты 2017 года.Я предполагаю, что что-то не так с типом соединения или чем-то в предложении on, например, попытка вычисления даты ...

Любая помощь будет принята с благодарностью

...