在SQL Server中使用over()
我正在尝试在SQL Server中实现一个在SQL Server中使用over(),sql,sql-server,sql-order-by,Sql,Sql Server,Sql Order By,我正在尝试在SQL Server中实现一个over()查询,该查询将生成一列,按名称显示最近三个期间的购买金额总和 例如,在period3中,新列将显示按名称分组的period1、period2、period3的总和。在周期4中,它应该显示周期2、周期3和周期4的总和。在周期5中,周期3、周期4和周期5的总和。诸如此类 其思想是专门使用T-SQL中的over()函数来实现解决方案 表: Date1 Name1 Purchase_Amount Period1 Date1 Name2
over()
查询,该查询将生成一列,按名称显示最近三个期间的购买金额总和
例如,在period3中,新列将显示按名称分组的period1、period2、period3的总和。在周期4中,它应该显示周期2、周期3和周期4的总和。在周期5中,周期3、周期4和周期5的总和。诸如此类
其思想是专门使用T-SQL中的over()
函数来实现解决方案
表:
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个以上期间的时间跨度。提供了上述示例表结构,谢谢您,这是可行的。只需更改为前两行和当前行之间的
行