Получен запрос, который получает данные о бронировании, сгруппированные по дате, оператору, источнику, маршруту, и я хочу самостоятельно присоединиться к нему, чтобы у меня были те же данные к нему, но к дате предыдущего года (добавьте 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, например, попытка вычисления даты ...
Любая помощь будет принята с благодарностью