방문을 기록한 테이블을 고려하십시오.
create table visits (
person varchar(10),
ts timestamp,
somevalue varchar(10)
)
이 예제 데이터를 고려하십시오 (시간 소인은 카운터로 단순화 됨)
ts| person | somevalue
-------------------------
1 | bob |null
2 | bob |null
3 | jim |null
4 | bob | A
5 | bob | null
6 | bob | B
7 | jim | X
8 | jim | Y
9 | jim | null
값이 변경 될 때까지 (예 : 널이 아닌 다음 값이 될 때까지) 모든 향후 방문에 해당 사용자의 마지막 널이 아닌 일부 값을 전달하려고합니다.
예상되는 결과 집합은 다음과 같습니다.
ts| person | somevalue | carry-forward
-----------------------------------------------
1 | bob |null | null
2 | bob |null | null
3 | jim |null | null
4 | bob | A | A
5 | bob | null | A
6 | bob | B | B
7 | jim | X | X
8 | jim | Y | Y
9 | jim | null | Y
내 시도는 다음과 같습니다
select *,
first_value(somevalue) over (partition by person order by (somevalue is null), ts rows between UNBOUNDED PRECEDING AND current row ) as carry_forward
from visits
order by ts
참고 : 정렬의 목적으로 (일부 값은 null)은 1 또는 0으로 평가되므로 파티션에서 null이 아닌 첫 번째 값을 얻을 수 있습니다.
위의 결과는 내가 얻은 결과를 제공하지 않습니다.
대답이 될만한 @a_horse_with_no_name.
—
ypercubeᵀᴹ
pg_dump
psql 출력에 데이터를 붙여 넣지 않고 테스트 데이터를 붙여 넣을 수 있습니까?pg_dump -t table -d database
create와COPY
command 가 필요 합니다.