我有以下有效日期表,其中有数千条记录需要根据某些标准更新/插入。
表Car_Specification
:
<表类>
Effective_Date
赛车
Num_Wheels
Num_Doors
Engine_Type
颜色
tbody><<tr>01 - 3月- 2021 C001 4 2 涡轮 红 01 - 4月- 2021 C001 4 2 涡轮 蓝色 01 - jun - 2021 C001 4 2 涡轮 绿色 表类>
作为帧挑战。几千条记录只是一个很小的数据集;您不需要合并数据。在原始规格的Car_Specification
中,每辆车都有一行,然后如果有变化,就把它们放在Car_Changes
中,当你想时,显示最后的值然后选择最后一次更改,或者如果没有更改则选择规格。
SELECT COALESCE(c.effective_date, s.effective_date) AS effective_date,
s.car_id,
COALESCE(c.num_wheels, s.num_wheels) AS num_wheels,
COALESCE(c.num_doors, s.num_doors) AS num_doors,
COALESCE(c.engine_type, s.engine_type) AS engine_type,
COALESCE(c.color, s.color) AS color
FROM car_specification s
LEFT OUTER JOIN LATERAL(
SELECT *
FROM car_changes c
WHERE c.car_id = s.car_id
AND c.effective_date >= s.effective_date
ORDER BY c.effective_date DESC
FETCH FIRST ROW ONLY
)
ON (1 = 1) -- The join condition is inside the lateral join.
如果你愿意,你可以把它包装在一个视图中。