Допустим, у меня есть "двумерная" таблица:
Y\X 1 2 3
1 10 20 30
2 40 50 60
3 70 80 90
Для каждого элемента я хочу найти смежные элементы слева, вверх и вверх:
Слева:
Y\X 1 2 3
1 Null 20 30
2 Null 40 50
3 Null 70 80
Вверх:
Y\X 1 2 3
1 Null Null Null
2 10 20 30
3 40 50 60
Вверх-влево:
Y\X 1 2 3
1 Null Null Null
2 Null 10 20
3 Null 40 50
Я пробовал следующий запрос:
select X, Y, value,
lag(value,1) over (partition by X order by Y) as up_value,
lag(value,1) over (partition by Y order by X) as left_value,
lag(value,4) over (order by X,Y) as up_left_value
from tt
order by X,Y
Он вернул «влево» и «вверх» правильно, но не совсем для «вверх-влево» (выделено как «НЕПРАВИЛЬНО»):
X Y value up_value left_value up_left_value
1 1 1 10 NL NL NL
2 1 2 20 10 NL NL
3 1 3 30 20 NL NL
4 2 1 40 NL 10 NL
5 2 2 50 40 20 10
6 2 3 60 50 30 20
7 3 1 70 NL 40 *30*(<- WRONG, should be "NL")
8 3 2 80 70 50 40
9 3 3 90 80 60 50
Моя игровая площадка здесь: https://rextester.com/BXJ66520
Как мне исправить проблему «вверх-влево»?