Excel运行总计/窗口function

假设我们有一些数据如下

Datetime Type Sale 25/07/2016 03:21 A 12 25/07/2016 04:00 B 23 25/07/2016 15:20 B 5 26/07/2016 05:15 A 15 26/07/2016 10:20 A 3 26/07/2016 16:10 B 20 27/07/2016 10:10 B 5 ....... 

问题是“使用Excel查找A类产品总销售量最大的36小时框架”。

从我所了解的情况来看,如果我试图接近它,36小时的框架将意味着每一个条目,我们将从这一点开始看框架。 例如,以第一个条目为起始框架将是25/07/2016 03:21 – > 26/07/2016 15:21,1.5天后,这意味着这个框架的总和是12 + 15 + 3 。 采取任何事后或比正在考虑的条目更快会减less的总和,不是吗? 以每个条目为出发点,你的总和“跨越最远”。

  1. 它看起来像SQL中的一个窗口总和给我。 你将如何find一个解决scheme只使用Excel?

  2. 如果你可以在SQL中提供解决scheme,那将会很好。

谢谢。

您需要提供更多有关您的36小时窗口如何工作的详细信息; 它是任意的26小时窗口,还是设置了定义的开始点和结束点? 如果是后者,只能通过额外的date时间周期表来进行计算。

对于前者,您可以查看每次销售前后的36小时,然后查找这些值的最大值。 最简单的方法是在Excel中使用Table和以下SUMIFS公式,该公式用于查找具有Datetime值36小时(1.5天)的同一types的所有销售额,或者在Datetime值之前或之后查找给定的行:

首先select你的数据,然后插入一个表格:

在这里输入图像说明

然后添加两列并input以下公式:

上个36小时:
= SUMIFS([销售],[types],[@types],[DATETIME], “>” &[@ DATETIME] -1.5 [DATETIME], “<=” &[@ DATETIME])

下个36小时:
= SUMIFS([销售],[types],[@types],[DATETIME], “<” &[@ DATETIME] 1.5,[DATETIME], “> =” &[@ DATETIME])

在这里输入图像说明

要使用Datetime值中的36小时周期在SQL中执行此操作,可以使用以下内容。 我已经包括了之前和之后的36个小时期间,因为只从一个方向看,将在数据集的开始或结束时错过销售。 窗口函数不允许你指定数据驱动的窗口,所以你需要使用连接或子select来实现你所追求的:

 declare @data table(dt Datetime, Type nvarchar(50), Sale int) insert into @data values ('2016/07/25 03:21','A',12) ,('2016/07/25 04:00','B',23) ,('2016/07/25 15:20','B',5) ,('2016/07/26 05:15','A',15) ,('2016/07/26 10:20','A',3) ,('2016/07/26 16:10','B',20) ,('2016/07/27 10:10','B',5) select a.dt ,a.Type ,a.Sale ,sum(dprev.Sale) as PrevSales ,a.NextSales from( -- If you only want the proceeding 36 hour period you can just use this part -- select d.dt ,d.Type ,d.Sale ,sum(dnext.Sale) as NextSales from @data d left join @data dnext on(d.Type = dnext.Type and dnext.dt between d.dt and dateadd(hour,+36,d.dt) ) group by d.dt ,d.Type ,d.Sale ------------------------------------------------------------------------------- ) a left join @data dprev on(a.Type = dprev.Type and dprev.dt between dateadd(hour,-36,a.dt) and a.dt ) group by a.dt ,a.Type ,a.Sale ,a.NextSales order by a.Type ,a.dt 

用下面的公式写E2
=SUMIFS($C$2:$C$8,$B$2:$B$8,"=A",$A$2:$A$8,">="&A2,$A$2:$A$8,"<"&A2+1.5)

在这里输入图像说明