Xem xét một bảng ghi lại các lượt truy cập
create table visits (
person varchar(10),
ts timestamp,
somevalue varchar(10)
)
Xem xét dữ liệu ví dụ này (dấu thời gian được đơn giản hóa như bộ đếm)
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
Tôi đang cố gắng chuyển tiếp một ngày nào đó không có giá trị cuối cùng của người đó cho tất cả các lần truy cập trong tương lai của anh ấy cho đến khi giá trị đó thay đổi (tức là trở thành giá trị không null tiếp theo).
Tập kết quả dự kiến trông như thế này:
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
Nỗ lực của tôi trông như thế nà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
Lưu ý: (somevalue là null) ước tính thành 1 hoặc 0 cho mục đích sắp xếp để tôi có thể nhận giá trị không null đầu tiên trong phân vùng.
Ở trên không cho tôi kết quả tôi sau.
pg_dump
dữ liệu thử nghiệm của mình thay vì dán dữ liệu vào đầu ra psql và lược đồ cho bảng không?pg_dump -t table -d database
chúng ta cần tạo và raCOPY
lệnh.