รับสองตาราง:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
ฉันต้องการที่จะเขียนแบบสอบถามว่าค่าตอบแทนts
, foo
และbar
ที่แสดงถึงมุมมองแบบครบวงจรของค่าล่าสุด กล่าวอีกนัยหนึ่งถ้าfoo
มี:
ts | foo
--------
1 | A
7 | B
และbar
บรรจุ:
ts | bar
--------
3 | C
5 | D
9 | E
ฉันต้องการคิวรีที่ส่งคืน:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
หากทั้งสองตารางมีเหตุการณ์ในเวลาเดียวกันลำดับไม่สำคัญ
ฉันสามารถสร้างโครงสร้างที่จำเป็นโดยใช้ค่ายูเนี่ยนทั้งหมดและค่าดัมมี่:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
ซึ่งจะให้ไทม์ไลน์แบบเส้นตรงของค่าใหม่ แต่ฉันไม่สามารถหาวิธีเติมค่าว่างตามแถวก่อนหน้าได้ ฉันได้ลองใช้lag
ฟังก์ชั่นหน้าต่างแล้ว แต่ AFAICT มันจะดูที่แถวก่อนหน้าเท่านั้นไม่ย้อนกลับแบบวนซ้ำ ฉันดู CTE แบบเรียกซ้ำ แต่ฉันไม่แน่ใจว่าจะตั้งเงื่อนไขเริ่มต้นและสิ้นสุดได้อย่างไร
foo
และลงbar
อย่างเข้มงวดเมื่อเวลาผ่านไปหรือเป็นกรณีทดสอบที่ทำให้เข้าใจผิดในแง่นี้หรือไม่?