在日期重叠的情况下运行合计的SUM列

t98cgbkg  于 2022-10-03  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个表,其中包含按日期划分的大约300万行客户销售额。

对于每个CustomerID行,我需要获取Espend_Value,其中Order_Date介于Order_Date_m365和Order_Date之间的总和

Order_Date_m365=订单日期减去365天。

我刚刚尝试了自联接,但当然,由于行与日期重叠,这导致了错误的结果。

如果有一个窗口函数的方法,这将是理想的,但我尝试了,但不能在函数中的日期之间,除非我错过了一个方法。

我现在能想到的唯一方法是循环,这样就把所有排名1的行处理到一个表中,然后在表中排名2,依此类推,但对于300万行来说,这将是非常低效的。

对于在SQL中通常如何处理这一问题,您有什么想法吗?

SELECT CustomerID,Order_Date_m365,Order_Date,Spend_Value
FROM   dbo.CustomerSales

x9ybnkn6

x9ybnkn61#

在这里,窗口函数可能对您没有帮助,因此您需要再次引用该表。我建议您使用带有子查询的APPLY来完成此操作。如果您有相关的索引,那么这可能是更有效的方法:

SELECT CS.CustomerID,
       CS.Order_Date_m365,
       CS.Order_Date,
       CS.Spend_Value,
       o.output
FROM dbo.CustomerSales CS
     CROSS APPLY (SELECT SUM(Spend_Value) AS output
                  FROM dbo.CustomerSales ca
                  WHERE ca.CustomerID = CS.CustomerID
                    AND ca.Order_Date >= CS.Order_Date_m365 --Or should this is >?
                    AND ca.Order_Date <= CS.Order_Date) o;

相关问题