単一のステートメントで実行したい更新ステートメントがありますが、少し難しいと感じています。
テーブルは、時間の経過に伴うターゲットの変化を記録します。
たとえば、1 月 1 日から 31 日までは 100、2 月 1 日から 28 日までは 110、3 月 1 日から 31 日までは 120 などとなります。
ユーザーは amount と 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 15th of Jan で 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
)
このように修正しようとすると、=> Error Code: 1054. Unknown column 'ptcth1.date_from' in 'where clause' が表示されます
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
)
何か案が?