0

我有一个 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_keyin 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

因此,我想使用在该特定日期有效的值来增强表格。希望这足够清楚......

4

1 回答 1

1

当前不支持您正确使用列 - 在此语法中,您必须明确指定日期或时间戳。为了解除这个限制,我打开了一个RFE(增强请求)- ID 111742它已经是一个未提交的候选人,但如果你支持我的请求,请投票给它。

你仍然可以用传统的方式解决它(没有新的语法)。我强烈推荐这篇博客文章“日期范围的乐趣”以获取详细信息

于 2018-08-21T04:43:10.383 回答