Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中使用over()_Sql_Sql Server_Sql Order By - Fatal编程技术网

在SQL Server中使用over()

在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

我正在尝试在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 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个以上期间的时间跨度。

提供了上述示例表结构,谢谢您,这是可行的。只需更改为前两行和当前行之间的