Использование ROW_NUMBER () для сравнения первого ARRAY со вторым, третьим, четвертым и т. Д. - PullRequest
0 голосов
/ 26 сентября 2018

Я использую ROW_NUMBER и пытаюсь сравнить arr в рН 1 с arr в рН 2,3,4 и т. Д., Чтобы увидетьесли они перекрываются.Я могу сделать это с помощью подзапроса / простого join .Есть ли способ, которым ИЗБЕГАЕТ соединение?

rn | id | job | arr    |desired_result
---+----+-----+--------+---------
 1 | 1  | 100 | {1,2}  | {1,2}
 2 | 1  | 101 | {2,3}  | {1,2}
 3 | 1  | 102 | {5,6,8}| {1,2}
 4 | 1  | 103 | {2,7}  | {1,2}

Я сделал dbfiddle

--USING JOIN 
WITH a AS (
SELECT 
ROW_NUMBER() OVER (PARTITION BY id ORDER by job) as rn
,*
FROM a_table
)
SELECT *
FROM (
SELECT id,arr
FROM a 
WHERE rn = 1 
) x
JOIN a
ON a.id=x.id

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете использовать first_value():

SELECT a.*, first_value(arr) over (partition by id order by job)
FROM a_table a;

row_number() не кажется необходимым.

...