Добавить идентификатор для дубликатов в двух столбцах - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть таблица, представляющая торговые обмены между городами, и я хотел бы добавить идентификатор, который бы указывал группы одинакового происхождения / назначения и назначения / происхождения.

Например:

| origin | destination
|--------|------------
| 8      | 2
| 2      | 8
| 8      | 2
| 8      | 5
| 8      | 5
| 9      | 1
| 1      | 9

станет:

| id | origin | destination
|----|--------|------------
| 0  | 8      | 2
| 0  | 2      | 8
| 0  | 8      | 2
| 1  | 8      | 5
| 1  | 8      | 5
| 2  | 9      | 1
| 2  | 1      | 9

У меня может быть тот же источник / пункт назначения, но у меня также может быть источник / пункт назначения = пункт назначения / источник, и я хочу, чтобы все эти группы были определены.

1 Ответ

0 голосов
/ 05 февраля 2019

В одну сторону: с оконной функцией dense_rank() и GREATEST / LEAST:

SELECT dense_rank() OVER (ORDER BY GREATEST(origin, destination)
                                 , LEAST   (origin, destination)) - 1 AS id
     , origin, destination
FROM   trade;

дБ <> скрипка здесь

- 1, чтобы начать с 0, как ваш пример.

...