以前の記録に基づいて増加率を計算しようとしています。たとえば、私はこのような記録を持っています
----------------------------------------------------------------------------------
| user_id | salary | salary_date_change | percent_increase | salary_record_id |
----------------------------------------------------------------------------------
| 10001 | 10000 | 01.10.2012 | | 1 |
| 10001 | 8000 | 01.09.2012 | | 2 |
| 10001 | 2000 | 01.07.2012 | | 3 |
| 10001 | 4000 | 01.08.2012 | | 4 |
| 10002 | 7500 | 01.09.2012 | | 5 |
| 10002 | 15000 | 01.10.2012 | | 6 |
---------------------------------------------------------------------------------
更新クエリまたは手順を実行して、次の操作を実行したいと考えています。
----------------------------------------------------------------------------------
| user_id | salary | salary_date_change | percent_increase | salary_record_id |
----------------------------------------------------------------------------------
| 10001 | 10000 | 01.10.2012 | 20 | 1 |
| 10001 | 8000 | 01.09.2012 | 50 | 2 |
| 10001 | 2000 | 01.07.2012 | 50 | 3 |
| 10001 | 4000 | 01.08.2012 | | 4 |
| 10002 | 7500 | 01.09.2012 | | 5 |
| 10002 | 15000 | 01.10.2012 | 50 | 6 |
---------------------------------------------------------------------------------
どうすればそうできますか?
これは私が試したものです:
create or replace procedure salary_increase_migration (
p_user_id integer,
l_value varchar2 default null,
l_old_salary number default null
) is
l_base_salary_prev_count integer default 0;
CURSOR get_base_salary_prev IS
SELECT *
FROM arr.user_multi_base_salary
ORDER BY salary_date_change DESC;
BEGIN
FOR x IN get_base_salary_prev LOOP
IF l_old_salary IS NOT NULL THEN
l_value := ((x.salary/l_old_salary)-1)*100;
UPDATE arr.user_multi_base_salary
SET percent_increase = l_value
WHERE user_id = x.user_id
AND salary_record_id = x.salary_record_id;
l_old_salary := x.salary;
END IF;
END LOOP;
END;
前もって感謝します