在 SQL 服务器中使用 over()

Using over() in SQL Server

我正在尝试在 SQL 服务器中执行一个 over() 查询,该查询生成一个列,按名称显示最近 3 期购买金额的总和。

例如,在 period3 中,新列将显示按名称分组的 period1、period2、period3 的总和。在 period4 中,它应该显示 period2、period3 和 period4 的总和。在 period5 中,period3、period4 和 period5 的总和。等等

想法是专门使用T-SQL中的over()函数来实现解决方案。

Table:

    Date1 Name1 Purchase_Amount Period1
    Date1 Name2 Purchase_Amount Period1
    Date2 Name1 Purchase_Amount Period2
    Date2 Name2 Purchase_Amount Period2
    Date2 Name3 Purchase_Amount Period2
    Date3 Name1 Purchase_Amount Period3
    Date3 Name2 Purchase_Amount Period3
    Date3 Name3 Purchase_Amount Period3
    Date3 Name4 Purchase_Amount Period3
    Date4 Name1 Purchase_Amount Period4
    Date4 Name2 Purchase_Amount Period4
    Date4 Name3 Purchase_Amount Period4
    Date4 Name4 Purchase_Amount Period4
    ...

假设一旦名称出现在 table 中,此名称在每个后续周期中都有一行。

SELECT *,
        SUM(Purchase_Amount) OVER (PARTITION BY Name 
                                       ORDER BY Date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
FROM YourTable

如果不能保证在每个后续周期中都有一行,则您需要对某些内容进行外部联接才能创建这样一行,否则要求和的名称的最后 3 行可能跨越更多的时间跨度超过 3 个时期。