sql - 在 SQL Server 中使用 over()
问题描述
我正在尝试over()
在 SQL Server 中实现一个查询,该查询会生成一个按名称显示最近 3 个购买期间总和的列。
例如,在 period3 中,新列将显示按名称分组的 period1、period2、period3 的总和。在 period4 中,它应该显示 period2、period3 和 period4 的总和。在 period5 中,period3、period4 和 period5 的总和。如此等等
这个想法是专门使用over()
T-SQL中的函数来实现解决方案。
桌子:
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
...
解决方案
这应该可以满足您的需要,假设一旦名称出现在表中,在每个后续期间都会有一行对应该名称。
SELECT *,
SUM(Purchase_Amount) OVER (PARTITION BY Name
ORDER BY Date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)
FROM YourTable
如果不能保证在每个后续期间都有一行,则您需要在某事上进行外部联接以创建这样的行,否则,要汇总的名称的最后 3 行可能跨越超过 3 个期间的时间跨度。
推荐阅读
- c - 为什么 gcc 支持 std=gnu89 的布尔类型?
- json - 来自反应组件的 REST 调用
- c# - Asp net Core Identity 令牌认证过期
- android - 错误构建 Apk:com.android.build.api.transform.TransformException:生成主 dex 列表时出错
- c# - “Telerik.Web.UI”或其依赖项之一无法加载;.net 框架版本 4.5 Telerik.Web.UI 版本:2015、1、401、45
- sql - 更新 oracle8i 数据库中我们无法使用正则表达式的记录
- python - 列出函数输出给出的元素
- java - Android - 从 ListView 上单击的项目传递值并将它们显示在新的 Activity 上
- mysql - RDS MySQL Storage Full ...当数据库使用率低时
- asp.net - 如何检查arraylist是否已经包含一个对象