我有一个更新语句,我想在一个语句中执行,但我发现它有点棘手。
一张表记录了目标随时间的变化。
例如,从 1 月 1 日到 31 日,目标可以是 100,然后从 110 年 2 月 1 日到 28 日,然后从 120 年 3 月 1 日到 31 日,依此类推。
用户只输入金额和 date_from。每次删除、更新或插入新记录后,都会重新计算每条记录的 date_to。它获取的值是记录的 day_from 的前一天,其中最小的 day_from 大于当前记录的 day_from。由于我想不出一种更清楚的方法,所以这里有几个例子:
From To Amount
1st Jan 31st Jan 100
1st Feb 28th Feb 110
1st Mar 31st Mar 120
...
...
如果我插入一条 date_from 1 月 15 日且 value = 105 的记录,我希望 1 月 1 日的记录将 date_to 更新为 1 月 14 日,插入的记录将 date_to 更新为 1 月 31 日
删除 2 月 1 日的记录会使新插入记录的新记录的 date_to 从 1 月 31 日更改为 3 月 28 日。
我希望它能清楚地解释我正在尝试做的事情。
现在,这是我的 SQL,它不起作用
以下返回:
错误代码:1093。您不能在 FROM 子句中指定目标表 'ptcth1' 进行更新
update personal_trainer_client_target_history ptcth1 set date_to =
(
select min(date_from) from personal_trainer_client_target_history ptcth2
where ptcth2.date_from > ptcth1.date_from
)
当我尝试像这样更正它时,我得到 => 错误代码:1054。'where 子句'中的未知列'ptcth1.date_from'
update personal_trainer_client_target_history ptcth1 set date_to =
(
select date_from from
(
select min(date_from) from personal_trainer_client_target_history ptcth2
where ptcth2.date_from > ptcth1.date_from
)
as temp_table
)
任何想法?