具有运行总计的 SQL 分区

Posted

技术标签:

【中文标题】具有运行总计的 SQL 分区【英文标题】:SQL partition with running totals 【发布时间】:2021-10-28 02:39:04 【问题描述】:

我正在想办法解决以下问题:

用户每月购买 x $ 数量的商品。他们每购买 2500 美元,就可以获得一张礼品卡。如果在给定的一个月内,他们没有购买价值 2500 美元的商品,则购买的金额将结转到下个月并计入购买总额。

例如: 一月 - 购买金额为 200 美元。这不到 2500 美元,因此,200 美元结转到 2 月 2 月 - 购买金额为 600 美元。 600 美元 + 200 美元小于 2500 美元,因此,800 美元滚存到 3 月。 3 月 - 购买金额 1900 美元。所以,1900 美元 + 800 美元 = 2700 美元。已赚取 1 张礼品卡,并将 200 美元转入 4 月。

我希望能够计算每个月赚取的礼品卡。

谢谢

我的表有以下列:FiscalYear、FiscalMonth、Customer、AmountPurchased。

【问题讨论】:

【参考方案1】:
-- Total Gift Cards this month
,FLOOR
(
    ISNULL
    (
        SUM(AmountPurchased) OVER (PARTITION BY Customer ORDER BY FiscalYear, FiscalMonth)
        ,0
    ) / 2500
)
-- subtract Total Gift Cards last month
-
FLOOR
(
    ISNULL
    (
        SUM(AmountPurchased) OVER (PARTITION BY Customer
            ORDER BY FiscalYear, FiscalMonth ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
        ,0
    ) / 2500
) AS GiftCardsThisMonth

【讨论】:

这是完美的。正是我需要的!谢谢!

以上是关于具有运行总计的 SQL 分区的主要内容,如果未能解决你的问题,请参考以下文章

从运行总计 (SQL) 雪花中排除某些记录

在具有 Alwayson 设置的 SQL Server 中实现表分区

sql server 分区

具有集群和分区的表上的 Bigquery SQL 性能问题

sql server 分区(上)

SQL Server 表分区之水平表分区