Who*_*sKi 0 sql sql-server lag cumulative-sum
我想计算数据库中每个客户的每月订单累计金额。
例如,我有这样的数据:
| 顾客 | 年 | 月 | 无订单 |
|---|---|---|---|
| 第1544章 | 2022年 | 4 | 5 |
| 第1544章 | 2022年 | 4 | 1 |
| 第1544章 | 2022年 | 12 | 1 |
| 第1544章 | 2023年 | 1 | 3 |
结果应该与下面相同:
| 顾客 | 年 | 月 | 累计无订单数 |
|---|---|---|---|
| 第1544章 | 2022年 | 4 | 0 |
| 第1544章 | 2022年 | 12 | 6 |
| 第1544章 | 2023年 | 1 | 7 |
我lag()在下一步中使用了 and ,sum() over ()但我的结果是错误的!
我怎么解决这个问题?
正如@Larnu在评论中建议的那样
看来您需要在这里执行几个步骤。首先聚合(和分组)为几个月,然后使用累积 SUM,但让窗口不包含当前行。
下面是一些实现这个想法的 SQL ( DB FIDDLE )
SELECT customer,
year,
month,
cumulative_no_orders = ISNULL(SUM(SUM(no_orders))
OVER (
PARTITION BY customer
ORDER BY year, month
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
, 0)
FROM YourTable
GROUP BY customer,
year,
month
Run Code Online (Sandbox Code Playgroud)
它首先进行聚合
SELECT customer,
year,
month,
sum_no_orders = SUM(no_orders)
FROM YourTable
GROUP BY customer, year, month
Run Code Online (Sandbox Code Playgroud)
返回以下内容
| 顾客 | 年 | 月 | 订单总数 |
|---|---|---|---|
| 第1544章 | 2022年 | 4 | 6 |
| 第1544章 | 2022年 | 12 | 1 |
| 第1544章 | 2023年 | 1 | 3 |
然后计算之前行的 sum_no_orders 的运行总计。