Giải pháp trong Postgres khá dễ dàng, vì nó hỗ trợ generate_series()
. Trước tiên, hãy phân tích dữ liệu cho một hàng mỗi ngày cho mỗi hàng trong bảng của bạn:
select d.*, gs.dy
from data d, lateral
generate_series(start_day, end_day) gs(dy);
Sau đó, tổng hợp để nhận nhiệm vụ cho mỗi ngày:
select d.person, d.dy, max(d.task_key) as task_key
from (select d.*, gs.dy
from data d, lateral
generate_series(start_day, end_day) gs(dy)
) d
group by d.person, d.dy;
Sau đó, bạn có thể tổng hợp lại, nhưng điều này rất khó vì bạn có thể đã "tách" các hàng ban đầu (xem nhận xét của tôi). Điều này trả lời câu hỏi của bạn về nhiệm vụ sẽ thực hiện vào ngày nào.
Bạn có thể thực hiện tất cả những điều này mà không cần nối bên hoặc generate_series()
bằng cách sử dụng một số / bảng kiểm đếm.