Сортировка столбца A на основе столбца B, который содержит предыдущие значения из столбца A - PullRequest
0 голосов
/ 17 мая 2019

Я хочу отсортировать столбец A на основе столбца B, который содержит предыдущие значения из столбца A.

Вот что у меня есть:

+----+----------+----------+
| ID |    A     |    B     |
+----+----------+----------+
|  1 | 17209061 |          |
|  2 | 53199491 | 51249612 |
|  3 | 61249612 | 17209061 |
|  4 | 51249612 | 61249612 |
+----+----------+----------+

И вот что я хотел бы иметь:

+----+----------+----------+----------+
| ID |    A     |    B     | Sort_seq |
+----+----------+----------+----------+
|  1 | 17209061 |          |        1 |
|  3 | 61249612 | 17209061 |        2 |
|  4 | 51249612 | 61249612 |        3 |
|  2 | 53199491 | 51249612 |        4 |
+----+----------+----------+----------+

Я уверен, что есть простой способ сделать это. У вас есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 17 мая 2019

Просто используйте lag() in order by:

order by lag(a) over (order by id) nulls first

Если вы хотите столбец, то:

select t.id, t.a, t.prev_a,
       row_number() over (order by prev_a nulls first)
from (select t.*, lag(a) over (order by id) as prev_a
      from t
     ) t;
...