首页 > 解决方案 > 轧制产品剩余间隙填充

问题描述

产品在某个日期的剩余按产品操作(收入和支出)计算,例如货币交易的余额。

我有一个滚动产品操作的物化视图,其中投影到相应产品的每个操作都保留在通过窗口函数(ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)执行操作的那一刻。

在此处输入图像描述

但是,如果我想获得当日的产品遗骸,并且在这一天没有进行任何产品操作,那么我将无法接收遗骸。

如何填补零产品运营数天的空白?如何以最低的成本高效地完成它?有没有其他方法可以有效地获得产品残留?

标签: sqldatabasepostgresqldatabase-design

解决方案


在 Postgres 中,您可以使用以下方式填写数据generate_series()

select p.product_id, coalesce(t.created_at, gs.dte),
       coalesce(volume, 0),
       coalesce(remaining_volume, 0)
from (select product_id, min(created_at)::min_ca, max(created_at) as max_ca
      from t
      group by product_id
     ) p cross join lateral
     generate_series(min_ca::date, max_ca::date, interval '1 day') gs(dte) left join
     t
     on t.product_id = p.product_id and
        t.created_at::date = gs.dte;

推荐阅读