在 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 个时期。
我正在尝试在 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 个时期。