我正在处理一个项目,在该项目中,我必须创建一个仅包含最近7天聚合值的表。目标表的结构为:
customer_id,distinct_products
1, 20
2, 5
3, 0
4, 2
5, 3
现在将上述值视为截至今天的值2016年1月12日,这意味着基于(2016年1月5日至2016年1日12日)的汇总
现在,明天当我必须更新此表时,它应该包含根据2016年1月6日的数据汇总的值至2016年1月13日
问题是,我不能每天重新聚合所有7天,因为每天都包含数百万行。
我使用的是Oracle 11g。
我认为以下逻辑应该能在中工作
- 当天取合计
- 将其添加到当前周的目标/汇总表中的现有编号中
- 将步骤2的结果除以一周中的当前日期,范围为1-7,并用结果更新汇总表
然后,汇总表会有你一周的"跑步"平均值,你只需要汇总当前一天,这是无论如何都需要的。
希望这个逻辑有帮助。。
我发现以下步骤非常快速准确:
1-处理1天(每天第1天)的数据创建一个聚合表
customer_id,date,prod_id
,我称之为Stage_Agg。每天添加1天数据并删除1天数据,即>Day-7
2-处理Stage_Agg以生成名为Stage_Agg7的第二个聚合表,这将生成表
customer_id,distinct_prod_count7
3-更新事实表,你就可以
让我知道你们的想法。