0

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 に設定することです。

これを行う良い方法は何ですか?

4

1 に答える 1