我要做的是通过生成各种汇总表来减少聚合数据所需的时间。当我插入记录时,会触发插入后触发器,这将更新正确的行。如果需要,我会更新汇总表的所有列,但由于表中有25列,每个插件只更新其中的2列,我宁愿能够动态选择要更新的列。后插入触发器中的当前更新语句类似于:
update peek_at_chu.organization_data_state_log odsl
inner join ( select
lookUpID as org_data_lookup,
i.interval_id,
peek_at_chu.Get_Time_Durration_In_Interval1('s', new.start_time, new.end_time, i.start_time, i.end_time) as time_in_int,
new.phone_state_id
from
(peek_at_chu.interval_info i
join peek_at_chu.interval_step int_s on i.interval_step_id = int_s.interval_step_id)) as usl on odsl.org_date_lookup_id = usl.org_data_lookup
and odsl.interval_id = usl.interval_id
set
total_seconds = total_seconds + usl.time_in_int,
case new.phone_state_id
when 2 then
available_seconds = available_seconds + time_in_int
end;
在此,lookUpID是先前在触发器中声明的变量。将指示要更新的汇总表的哪个字段为new.phone_state_id
的字段。 phone_state_id
不一致,即在此表中跳过了一些数字,因此除非我创建映射,否则基于列号的更新将在窗口外。
case
选项会抛出错误,但如果可以的话,我希望使用与此类似的内容而不是25 if
个语句。
答案 0 :(得分:0)
您必须更新所有列,但使用条件来确定是为其赋予新值还是保留旧值:
set total_seconds = total_seconds + usl.time_in_int,
available_seconds = IF(new.phone_state_id = 2, available_seconds + time_in_int, available_seconds)
对于需要有条件更新的所有其他列,重复最后一行中的模式。