KDT#14 事务粒度事实表中某天数据的查询
对于事务粒度事实表来说,只有当该天有事务发生时,才会在事实表中出现当天的记录。一个简化的事务粒度事实表如下所示。
Date_Key(FK)
Account_Key(FK)
Transaction_Type_Key(FK)
Transcation_Sequence_Number
Final_Flag
Amount
Balance
表中,Date_key是日期维度表的代理键。Account_key是帐户维度表的代理键。Transaction_Type_Key是事务类型表的代理键。Transcation_Sequence_Number是帐户当天事务的流水号。Final_Flag='True'表示这是当天最后一笔事务。Amount是事务的数量。Balance是帐户当时的结余值。
对于这样的事实表,如果6月1日到15日都没有事务发生,就不会出现该天的记录。但是,需求会出现要我们查询6月10日所有帐户的结余值的情况。示例的SQL如下所示。
SELECT a.acctnum,f.balance
FROM fact f,account a
WHERE f.account_key = a.account_key
AND f.final_flag = 'True'
AND f.date_key =
(SELECT MAX(g.date_key)
FROM fact g
WHERE g.account_key = f.account_key
AND g.date_key IN
(SELECT t.date_key
FROM time t
WHERE t.fulldate <= '2006-6-10'))