使用Google表格arrayformula从时间范围内每天获取每天的最大值

问题描述

Example

一个范围A,它存储时间及其值,并且会动态更新(在示例中未显示)。

我要从A范围开始,设定每天的动态范围B及其最大值。

Filter()不适用于arrayformula,我也不知道查询是否也适用。

解决方法

您可以尝试执行此操作(在Excel上进行了测试,因为您的Google表格已被阻止,但应该可以正常运行)

=SUMPRODUCT(MAX(--($A$5:$A$31>D5)*--($A$5:$A$31<D5+1)*$B$5:$B$31))

enter image description here

它是这样工作的:

    如果单元格值大于日期参考,则
  1. --($A$5:$A$31>D5)将返回1和0的数组。假设日期参考为24/01/2020,则返回的数组将为{1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1}
  2. --($A$5:$A$31<D5+1)将执行相同的操作,但前提是单元格的值小于d5 + 1(第二天)。因此,对于2020年2月24日,我们将获得{1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
  3. 第一个*将两个数组相乘,所以{1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1} * {1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0} = {1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
  4. 第二*将前一个数组乘以B5:B31范围内的值,这意味着{1;1;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0} * {0,333;0,667;0,667;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0,667} = {0,667;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0}
  5. MAX将从上一个数组(在这种情况下为0,667)中获得 max
  6. SUMPRODUCT已添加,因此我们可以使用数组。普通Max不会自己做。

注意:请注意,我的小数点分隔符是逗号,我的参数分隔符是分号,因此您可能需要根据您的语言设置来解决此问题

,

您可以通过查询来做到这一点:

=ArrayFormula(query({int(A4:A),B4:B},"select Col1,max(Col2) where Col2 is not null group by Col1 label Col1 'Date'"))

只要您正确格式化结果中的日期列即可。

enter image description here

编辑

要删除列标签,只需将一个空字符串如下所示:

=ArrayFormula(query({int(A4:A),max(Col2) where Col2 is not null group by Col1 label Col1 '',max(Col2) ''"))