【问题标题】:Rolling product remains gap filling轧制产品剩余间隙填充
【发布时间】:2020-05-22 10:16:10
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请edit您的问题(通过点击下面的edit链接)并添加一些示例数据和基于该数据的预期输出为formatted text .请参阅here,了解有关如何创建漂亮的文本表格的一些提示。 (edit 您的问题 - 在 cmets 中不要邮政编码或其他信息)
  • 除了回答中显示的方法外,还可以通过填补客户端的空白来完成。如果您关心客户端和 Postgres 之间传递的数据量,这可能更有意义。

标签: sql database postgresql database-design


【解决方案1】:

在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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2018-11-11
    • 2015-04-14
    • 2013-03-12
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多