如何在系统周期时态表中与/子选择连接



我有一个 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联接,该在第at_key列中具有mtt_key的值,以及一个at_additional_key和一个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

INVALID PERIOD SPECIFICATION OR PERIOD CLAUSE FOR PERIOD SYSTEM_TIME. REASON CODE = 03. SQLCODE=-20524收到错误 - 我可以在 https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/codes/src/tpc/n20524.html 上找到错误描述 - 但我真的不明白 - 似乎无法使用另一个表的列FOR SYSTEM_TIME AS OF.

那么,我是否可以以某种方式加入这些临时表,或者如何从这两个表中获取所需信息?有什么想法吗?有什么提示吗?谢谢。

我看到的唯一方法是手动尝试处理系统周期时态表生成的时间戳的复杂方法,但我希望某处有更简单的方法......或者只是对我的子选择中的语法的误解

以下是一些示例数据,用于阐明我拥有什么以及我想要什么:

my_temporal_table有一个当前行,该行已于 2018-01-07 更新

mt_key | mtt_so_up_val |(已更新( -------+---------------+----------------- 1 |Z |(2018-01-07(

以前的更新已打开

1 |Y |(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 |G |2018-01-07 1 |H |2018-01-08 1 |一 |2018-01-09

不同的键可能有更多的数据,但如果我过滤键 = 1,那么结果应该是

at_key | at_additional_key | at_date_column | mtt_so_up_val -------+-------------------+----------------+-------------- 1 |一 |2018-01-01 |X 1 |乙 |2018-01-02 |Y 1 |C |2018-01-03 |Y 1 |D |2018-01-04 |Y 1 |E |2018-01-05 |Y 1 |F |2018-01-06 |Y 1 |G |2018-01-07 |Z 1 |H |2018-01-08 |Z 1 |一 |2018-01-09 |Z

所以我想用该特定日期有效的值来增强表格。希望这足够清楚...

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

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

最新更新