Postgres में समाधान काफी आसान है, क्योंकि यह generate_series()
. का समर्थन करता है . सबसे पहले, अपनी तालिका में प्रत्येक पंक्ति के लिए प्रतिदिन एक पंक्ति के लिए डेटा को एक्सप्लोर करें:
select d.*, gs.dy
from data d, lateral
generate_series(start_day, end_day) gs(dy);
फिर, प्रत्येक दिन के लिए कार्य प्राप्त करने के लिए एकत्रित करें:
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;
फिर आप फिर से एकत्र कर सकते हैं, लेकिन यह मुश्किल है क्योंकि आप मूल पंक्तियों को "विभाजित" कर सकते हैं (मेरी टिप्पणी देखें)। यह आपके प्रश्न का उत्तर देता है कि किस दिन किस कार्य को करना है।
आप यह सब बिना लेटरल जॉइन किए या generate_series()
. के बिना कर सकते हैं संख्या/ मिलान तालिका का उपयोग करके।