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

Входные

TableA

ID  YEAR    
101 2012
101 2013
101 2014
102 2012
102 2013
102 2014

TabeleB

ID  YEAR    AMOUNT
101 2011    2384
101 2012    2987
101 2013    3232
101 2014    3987
102 2011    2212
102 2012    2332
102 2013    2987
102 2014    3222

Выходная таблица

ID  YEAR    AMOUNT  PREV YEAR AMOUNT
101 2012    2987    2384
101 2013    3232    2987
101 2014    3987    3232
102 2012    2332    2212
102 2013    2987    2332
102 2014    3222    2987

Описание проблемы: TableA выберет годы как base и tableB будут иметь все записи, но мне нужно присоединиться к tableA и TableB, чтобы подключить данные за предыдущий год, см. таблицу вывода. Я попытался выполнить самостоятельное присоединение, но не смог его получить.

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

Если у всех ID есть данные за все годы, вы можете просто использовать оконные функции. Это должно быть более эффективным, чем самостоятельное присоединение, поскольку оно сканирует tableb только один раз:

select b.*
from tablea a
inner join (
    select b.*, lag(amount) over(partition by id order by year) prev_year_amount
    from tableb b
) a on a.id = b.id and a.year = b.year
0 голосов
/ 18 июня 2020

Я думаю, это два соединения:

select a.*, b.amount, bprev.amount
from a left join
     b
     on b.id = a.id and b.year = a.year left join
     b bprev
     on bprev.id = a.id and bprev.year = a.year - 1;

Здесь - скрипка db <>.

...