[SQL] 어떻게 윈도우 함수에서 링 데이터 구조를 사용하는
SQL어떻게 윈도우 함수에서 링 데이터 구조를 사용하는
I는 그것이 그 사이클 시퀀스로 표현 될 수있다, 환 구조 (또는 원형 버퍼)에 배치되는 데이터를 가지고 ...- 1-2-3-4-5-1-2-3 -... . 5 부 반지의 아이디어를 얻을이 사진을 참조하십시오 :
나는 세 점의 배열에 지연과 리드 항목을 결합 할 수있는 창 조회를 작성하고 싶습니다,하지만 난 그것을 알아낼 수 없습니다. 5 부 고리의 1 부에서 예를 들어, 지연 / 납 시퀀스 5-1-2, 또는 부분 (4) 3-4-5이다.
여기에 부품 (링마다 항상 개 이상)의 수가 다른 두 개의 링의 예 테이블은 다음과 같습니다
create table rp (ring int, part int);
insert into rp(ring, part) values(1, generate_series(1, 5));
insert into rp(ring, part) values(2, generate_series(1, 7));
여기에 거의 성공 쿼리는 다음과 같습니다
SELECT ring, part, array[
lag(part, 1, NULL) over (partition by ring),
part,
lead(part, 1, 1) over (partition by ring)
] AS neighbours
FROM rp;
ring | part | neighbours
------+------+------------
1 | 1 | {NULL,1,2}
1 | 2 | {1,2,3}
1 | 3 | {2,3,4}
1 | 4 | {3,4,5}
1 | 5 | {4,5,1}
2 | 1 | {NULL,1,2}
2 | 2 | {1,2,3}
2 | 3 | {2,3,4}
2 | 4 | {3,4,5}
2 | 5 | {4,5,6}
2 | 6 | {5,6,7}
2 | 7 | {6,7,1}
(12 rows)
나는이해야 할 유일한 것은 마지막 값 각 링의 끝 지점으로 NULL을 대체하는 것입니다. 이제, 지연 및 리드 윈도우 함수와 함께 이상적 일 것 LAST_VALUE 기능이있다. 그러나 이러한 중첩 될 수 없습니다 :
SELECT ring, part, array[
lag(part, 1, last_value(part) over (partition by ring)) over (partition by ring),
part,
lead(part, 1, 1) over (partition by ring)
] AS neighbours
FROM rp;
ERROR: window function calls cannot be nested
LINE 2: lag(part, 1, last_value(part) over (partition by ring)) ...
최신 정보. 사용 합체 저스틴의 제안이 중첩 윈도우 기능을 피하기 위해 @ 감사합니다. 또한, 성 / 값이 예를 들어 부분 우연히 링 시퀀스에 의해 명시 적으로 순서가 필요 많은 사람들에 의해 지적되었다. 입력 데이터를 조금 무작위 화 그래서 :
create table rp (ring int, part int);
insert into rp(ring, part) select 1, generate_series(1, 5) order by random();
insert into rp(ring, part) select 2, generate_series(1, 7) order by random();
해결법
-
==============================
1.
-
==============================
2.질문:
질문:
SQL 뿐인 예
SELECT ring, part, array[ coalesce(lag(part, 1, NULL) over (partition by ring), max(part) over (partition by ring)), part, lead(part, 1, 1) over (partition by ring) ] AS neighbours FROM rp;
결과:
| RING | PART | NEIGHBOURS | |------|------|------------| | 1 | 1 | 5,1,2 | | 1 | 2 | 1,2,3 | | 1 | 3 | 2,3,4 | | 1 | 4 | 3,4,5 | | 1 | 5 | 4,5,1 | | 2 | 1 | 7,1,2 | | 2 | 2 | 1,2,3 | | 2 | 3 | 2,3,4 | | 2 | 4 | 3,4,5 | | 2 | 5 | 4,5,6 | | 2 | 6 | 5,6,7 | | 2 | 7 | 6,7,1 |
from https://stackoverflow.com/questions/25030179/how-to-use-a-ring-data-structure-in-window-functions by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 주입으로부터 보호 (0) | 2020.06.16 |
---|---|
[SQL] Class.forName을 (JDBC_DRIVER)는 더 이상 필요하지? (0) | 2020.06.16 |
[SQL] SQL의 기본값 설정은 MS Access에서 작동하지 (0) | 2020.06.16 |
[SQL] phpMyAdmin에 - 총 기록 횟수에 따라 다름 (0) | 2020.06.16 |
[SQL] 테이블 출력 매개 변수를 사용하여 저장 프로 시저를 만들 수 없습니다 (0) | 2020.06.16 |