sql-server - 总销售额,每个日期的 MTD 销售额
问题描述
需要显示 2019 年 6 月 13 日 - 2019 年 6 月 27 日期间每个日期的总销售额,以及每个日期(2019 年 6 月 1 日 - 当前日期)的 MTD 销售额。
这是我的查询:
select date, sum(sales) as 'Daily Sales',
sum(sales) over (partition by datepart(month, date) order by date ROWS between unbounded preceding and current row) as 'MTD Sales'
from Orders
where date between '13/06/2019' and '27/06/2019'
group by date;
添加该where
子句后,它将 MTD 销售额更改为仅从 13 日开始显示运行总计,而我希望 MTD 运行总计从 1 日开始。
这是所需的输出:
Date | Daily Sales | MTD Sales
---------------------------------
13 June | 200 | 700
15 June | 300 | 1000
20 June | 500 | 1500
解决方案
因为在评估子句之后计算的窗口函数where
,您必须将其作为两个查询执行。这是一个例子:
;with [MTD sales] as (
select date, sum(sales) as 'Daily Sales',
sum(sales) over (partition by datepart(month, date) order by date ROWS between unbounded preceding and current row) as 'MTD Sales'
from Orders
group by date;
)
select *
from [MTD sales]
where date between '13/06/2019' and '27/06/2019'
这使用 CTE 运行计算正确的日期总和,然后在运行正确的计算后应用过滤作为第二步。
推荐阅读
- javascript - How to decompress an object compressed by zlib in JavaScript?
- javascript - NativeScript Web Worker,不断报错:com.tns.NativeScriptException: Failed to find module: relative to app//
- r - 如何更新在 https://www.shinyapps.io/ 上运行的 shinyapp 中的数据
- flutter - 从飞镖中的Json响应更改日期和时间时间格式?
- python - 如何在python中的浮点变量上运行for循环?
- java - MediaPlayer 在循环中冻结应用程序
- android - 如何从 ViewModel 中的 Fragment 访问 Android 数据
- java - 如果可以的话,我可以在 android studio 中使用数组吗?那么如何在屏幕上显示数组的所有元素
- keras - Keras LSTM 网络,Softmax/Embedding 输出作为每个时间步的输入(时间步 0 除外)
- java - 如何添加
清单中的标签?