使用 ROW_NUMBER () 将第一个数组与第二个、第三个、第四个等进行比较
Using ROW_NUMBER () to Compare 1st ARRAY to 2nd, 3rd, 4th, etc
我正在使用 ROW_NUMBER
,我正在尝试将 rn 1 中的 arr
与 [=21= 中的 arr
进行比较]rn 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
您可以使用 first_value()
:
SELECT a.*, first_value(arr) over (partition by id order by job)
FROM a_table a;
row_number()
好像没有必要。
我正在使用 ROW_NUMBER
,我正在尝试将 rn 1 中的 arr
与 [=21= 中的 arr
进行比较]rn 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
您可以使用 first_value()
:
SELECT a.*, first_value(arr) over (partition by id order by job)
FROM a_table a;
row_number()
好像没有必要。