sql - 累积值直到最新
问题描述
我正在开发一个订单系统。对于分析部门,我想构建一个视图来累积给定日期的所有销售额。
这不是问题,我得到了工作查询。更复杂的是第二个数字,我想显示当天的累计销售额。
这意味着如果我在 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);
解决方案
只需使用窗口函数:
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);
根据您代码中的注释,我推测您需要本月至今的数字,因此这也按月划分。
推荐阅读
- function - 如何在一天中的不同时间加入已识别的模型(matlab)
- reactjs - 填充时将样式全局应用于材质 ui 文本输入
- flask - Flask 装饰可插拔视图
- websocket - 如何保护 Blazor Server 免受跨域攻击?
- python - 如何使用已定义的字符串但变量后缀python读取文件路径或文件夹名称
- python - 密码学 - 如何使用 ofb 模式实现 MARS?
- android - buildozer无法安装android ndk
- powershell - 用于许可证使用的 Powershell 脚本
- java - 如何在硒中不设置本地驱动程序的情况下启动浏览器?(不访问本地chromeDriver.exe)
- java - 如何从两个带有 textview 作为recyclerview 项目的edittexts 中获取所有值,并在alertdialog 中的另一个分段recyclerview 中设置