假设我们有一个非常大的表,我们希望以增量方式处理其统计信息。
| 日期|金额|客户|
| - ------| - ------| - ------|
| 二〇二二年十二月二十日|三十|玛丽|
| 二〇二二年十二月二十一日|十二|玛丽|
| 二〇二二年十二月二十日|十二|鲍勃|
| 二〇二二年十二月二十一日|十五|鲍勃|
| 二〇二二年十二月二十二日|十五|爱丽丝|
我们希望能够逐步计算某个日期范围内每个不同客户的收入。因此,从12 - 20到12 - 22(包括12 - 20和12 - 22),我们有3个不同客户,但从12 - 20到12 - 21,我们有2个不同客户。
如果要每天运行一次此管道,并且有许多客户,如何保持任意日期范围内不同客户的滚动计数?是否有一种方法可以做到这一点,而无需每天存储大量客户名称?
我们希望支持具有日期范围过滤器的前端,并可以快速计算该日期范围的结果。例如:
| 开始日期|结束日期|每个客户的平均收入|
| - ------| - ------| - ------|
| 二〇二二年十二月二十日|二〇二二年十二月二十一日|(30 + 12 + 12 + 15)/2 = 34.5|
| 二〇二二年十二月二十日|二〇二二年十二月二十二日|(30 + 12 + 12 + 15 + 15)/3 = 28|
我能想到的唯一方法是每天存储一组客户名称,在查看结果时计算集合的联接集的大小以计算不同的客户。这似乎效率很低。在这种情况下,我们将存储下表,其中客户列非常大。
| 日期|总收入|客户|
| - ------| - ------| - ------|
| 二〇二二年十二月二十日|四十二|集合(玛丽,鲍勃)|
| 二〇二二年十二月二十一日|二十七|集合(玛丽,鲍勃)|
| 二〇二二年十二月二十二日|十五|集合(爱丽丝)|
1条答案
按热度按时间4xrmg8kj1#
你需要使用窗口函数。下面是一个类似问题的解决方案:https://stackoverflow.com/a/45869254/1888799