HIST と呼ばれる次のようなテーブルがあります。
+---------------+---------------+----------------+-------------+-------------+
| ID | MGROUP | ACTIVESTATUS | FROM_DATE | TO_DATE |
+---------------+---------------+----------------+-------------+-------------+
| 86183752530 | 30546 | Inactive | 09-MAR-09 | 05-SEP-09 |
| 86183752533 | 30546 | Active | 05-SEP-09 | 29-SEP-09 |
| 86183752534 | 30546 | Inactive | 29-SEP-09 | (null) |
| 86369271439 | 85764511006 | Active | 19-OCT-10 | (null) |
| 86369271447 | 85851006389 | Active | 16-NOV-10 | (null) |
| 86369271517 | 86369271513 | Active | 25-JAN-11 | (null) |
+---------------+---------------+----------------+-------------+-------------+
このテーブルは、グループの履歴を記録するために使用されます。たとえば、MGROUP 30546 が 09-MAR-09 から 05-SEP-09 に非アクティブになり、05-SEP-09 から 29-SEP-09 に再びアクティブになったことがわかります。その後、2009 年 9 月 29 日に再び非アクティブになり、現在は将来の更新までこの状態です ( null )。
これで、GROUP と呼ばれる次のような別のテーブルができました。
+-------------------+-------------+--------------+
| M_NAME | ID | ACTIVESTATUS |
+-------------------+-------------+--------------+
| Jack Smith | 30546 | Inactive |
| John Doe | 85764511006 | Active |
| Bobby Drop Tables | 85851006389 | Active |
+-------------------+-------------+--------------+
私がやりたいことを行う Select ステートメントを作成しました。
select
m_name,
hist.to_date,
SYSDATE AS new_hist_to_date
from group
inner join
(
select
mgroup,
from_date,
to_date,
rowNumber
from
(
select
mgroup,
from_date,
to_date, activestatus, row_number() over ( partition by mgroup order by to_date desc nulls first) rowNumber
from hist
)
where rowNumber = 1
) hist ON hist.MGROUP = group.id
where m_mgroup.ACTIVESTATUS = "Inactive"
これを update ステートメントに変換する試みはすべて失敗しました。私がやろうとしているのは、テーブル GROUP.ACTIVESTATUS = Inactive の場合、テーブル HIST.TO_DATE を SYSDATE に設定することです。
これを行う良い方法は何ですか?