0

updateタイムスタンプに基づいて履歴テーブルから属性を検索するステートメントを Oracle で作成しようとしています。たとえば、データは次のようになります。

TABLE A
A_ID  TIMESTAMP              ATTR
---------------------------------
1     5/27/2012 10:30:00 AM  ?

TABLE B
B_ID  A_ID  TIMESTAMP              ATTR
---------------------------------------
1     1     5/26/2012 9:01:08 AM   W
2     1     5/27/2012 8:38:21 AM   X
3     1     5/28/2012 9:01:01 AM   Y
4     1     5/29/2012 11:37:54 PM  Z  

下限は >= B.TIMESTAMP ですが、上限を < B."the next TIMESTAMP" と書く方法がわかりません。したがって、上記の例では、テーブル A の属性が「X」に更新されます。

これはかなり一般的な使用例のようです。この投稿を見ましたが、満足のいく回答が得られなかったようですので、再度投稿しようと思いました。

4

1 に答える 1

0
UPDATE A SET attr = (
    SELECT b1.attr 
    FROM B b1
        INNER JOIN (
            SELECT MAX(b3.timestamp) mx FROM B b3
            WHERE b3.timestamp < A.timestamp
        ) b2 ON b1.timestamp = b2.mx
)

Oracle が内部結合サブクエリ内でテーブル A を使用することを許可しているかどうか思い出せません...試してみませんか?

于 2012-05-30T15:49:04.633 に答える