首页 > 解决方案 > 累积值直到最新

问题描述

我正在开发一个订单系统。对于分析部门,我想构建一个视图来累积给定日期的所有销售额。

这不是问题,我得到了工作查询。更复杂的是第二个数字,我想显示当天的累计销售额。

这意味着如果我在 2 月 1 日有 100 美元的销售额,则该列应显示为 100 美元。如果我在 2 月 2 日有 200 美元的销售额,那么该列应该显示 300 美元,依此类推。

到目前为止,这是我想出的:

select
    date_trunc('day', o.created_at) :: date,
    sum(o.value) sales_for_day,
    count(o.accepted_at) as num_of_orders_for_day,
    -- sales_for_month_to_date
    -- num_of_orders_for_month_to_date
from
    orders o
where
    status = 'accepted'
group by
    date_trunc('day', o.accepted_at);

标签: sqlpostgresql

解决方案


只需使用窗口函数:

select date_trunc('day', o.created_at) :: date,
       sum(o.value) as sales_for_day,
       count(o.accepted_at) as num_of_orders_for_day,
       sum(sum(o.value)) over (partition by date_trunc('month', o.accepted_at order by min(o.created_at)) as sales_for_month_to_date
       sum(count(*)) over (partition by date_trunc('month', o.accepted_at order by min(o.created_at)) as num_of_orders_for_month_to_date
from orders o
where status = 'accepted'
group by date_trunc('day', o.accepted_at);

根据您代码中的注释,我推测您需要本月至今的数字,因此这也按月划分。


推荐阅读