专注于中国的商业智能

导航

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是帐户当时的结余值。

对于这样的事实表,如果61日到15日都没有事务发生,就不会出现该天的记录。但是,需求会出现要我们查询610日所有帐户的结余值的情况。示例的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'))

posted on 2010-08-05 13:53  李梦蛟  阅读(445)  评论(0编辑  收藏  举报