我有一个 db2 数据库和一个系统周期时态表,因此很容易获得在特定日期有效的数据
SELECT mtt_sometimes_updated_value FROM my_temp_table FOR SYSTEM_TIME AS OF TIMESTAMP('2018-01-31') WHERE mtt_key = '...'
这会给我一行(因为我按键过滤),但我也可以添加FETCH FIRST 1 ROW ONLY
以防我在 where 条件下没有键。
现在我想将其用作子选择或连接,another_table
其值为mtt_key
in columnat_key
和 anat_additional_key
和 an at_date_column
。我想要的是与 结合my_temp_table
以使每一行another_table
都由mtt_sometimes_updated_value
.
当我尝试看起来很直观的东西时
SELECT at_key, at_additional_key, at_date_column,
(SELECT mtt_sometimes_updated_value
FROM my_temp_table FOR SYSTEM_TIME AS OF at_date_column
WHERE mtt_key = at_key)
FROM another_table
我收到一个错误- 我可以在https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/codes/src/tpc/n20524.htmlINVALID PERIOD SPECIFICATION OR PERIOD CLAUSE FOR PERIOD SYSTEM_TIME. REASON CODE = 03. SQLCODE=-20524
上找到错误描述- 但我不太明白它 - 似乎无法使用另一个表的列。FOR SYSTEM_TIME AS OF
那么,我可以以某种方式加入这些临时表,或者如何从这两个表中获取想要的信息?有任何想法吗?有什么提示吗?谢谢。
我看到的唯一方法是手动尝试处理系统周期时态表生成的时间戳的复杂方法,但我希望在某个地方有更简单的方法......或者只是对我的子选择中的语法有误解
这里有一些示例数据来阐明我拥有什么以及我想要什么:
该表my_temporal_table
有一个当前行,于 2018-01-07 更新
mt_key | mtt_so_up_val | (已更新) -------+---------------+----------------- 1 | Z | (2018-01-07)
以前的更新正在进行
1 | 是 | (2018-01-02) 1 | X | (2017-12-24)
桌子another_table
看起来像这样
at_key | at_additional_key | at_date_column -------+-------+--------------- 1 | 一个 | 2018-01-01 1 | 乙| 2018-01-02 1 | C | 2018-01-03 1 | D | 2018-01-04 1 | E | 2018-01-05 1 | F | 2018-01-06 1 | 克| 2018-01-07 1 | H | 2018-01-08 1 | 我 | 2018-01-09
不同键可能有更多数据,但如果我过滤 key = 1 那么结果应该是
at_key | at_additional_key | at_date_column | mtt_so_up_val --------+-------------------+----------------+----- --------- 1 | 一个 | 2018-01-01 | X 1 | 乙| 2018-01-02 | 是 1 | C | 2018-01-03 | 是 1 | D | 2018-01-04 | 是 1 | E | 2018-01-05 | 是 1 | F | 2018-01-06 | 是 1 | 克| 2018-01-07 | Z 1 | H | 2018-01-08 | Z 1 | 我 | 2018-01-09 | Z
因此,我想使用在该特定日期有效的值来增强表格。希望这足够清楚......