列出日期范围之间的每个月。 Google 查询

List each month between date range. Google Query

我为一个问题寻求帮助,我花了好几个小时试图解决这个问题,但没有成功。 我正在 google 电子表格上使用 google query()。 所以我有这种table(比方说A1:E3)

Client Bank receipt Start Date End date Value
John #1 14/10/2021 31/10/2021 500
John #2 14/10/2021 31/12/2021 500

为了更清楚起见,银行收据是具有开始日期和结束日期的值。因此,#2 银行收据涵盖 10 月、11 月和 12 月的 500。 我想要做的是按时间顺序排列的 table(列中有月份),它显示了约翰在这一年中的银行收据保险金额,以便获得这种结果:

October November December
John Bank receipts 1000 500 500

这是较长查询的第一步,但我需要以这种方式return获取数据才能继续。

我试图寻找方法 return 每个月的日期范围,但只发现帖子谈论 google 我无法玩的脚本。我也尝试使用 SEQUENCE() ,它似乎可以使用一些技巧,直到我从 2021/12/15 到 2022/03/31 并且由于年份的变化它 return 变成了 14。所以我完全没有解决方案。我确切地说我是使用 google 查询的新手,所以我可能会错过一些明显的事情。

非常感谢可能会提供帮助的人

这只是一个相当简单的 2 行 X 3 列演示,您可以在其上构建:

=ArrayFormula(mmult({1,1},if((C2:C3<=eomonth(G2,{0,1,2}))*(D2:D3>=eomonth(G2,{0,1,2})),E2:E3,0)))

稍后会给出更完整的解决方案


这是公式的更动态版本

=ArrayFormula(mmult(sequence(1,counta(A2:A),1,0),
if((C2:index(C:C,counta(C:C))<=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0)))*
(D2:index(D:D,counta(D:D))>=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0))),E2:index(E:E,counta(E:E)),0)))

但是原理是一样的

(1) 使用 eomonth 和 sequence 来制作月末的单行数组(31/10/21、30/11/21、31/12/21 等)

(2) 将这些日期与数据中的日期范围进行比较,以查看每个范围中包含哪些日期,以及它们匹配的位置,生成一个二维数组,其中包含金额以及跨越的月份和数据行下降

(3)使用mmult获取二维数组的列总数(这是获取列总数的标准方法shown here being used in Excel

我使用了一个更简单的公式来计算从 I1 开始的月份

=ArrayFormula(edate(G2,sequence(1,datedif(G2,H2,"M"),0)))

首先感谢所有提示和解决方案,一切正常。 现在我将采取比我想象的更棘手的进一步步骤。我需要执行此操作,但按将出现在行中的标签对返回值进行分组,如下所示:

https://i.stack.imgur.com/7Ch9r.png

难点在于,由于 array.formula(),我无法执行一个也会 'group by' 我一开始所想的结果的查询。所以我想我需要将 'array.formula()' 应用到良好的数据集(由 A、B 等过滤)。尽管我想避免创建 X 数据集,而是想找到一种动态的方法。 我看到你不能在 array.formula() 中使用 query(),但反之亦然。

我很清楚如何使用 query() 来完成它,但是 array.formula() 使它变得相当复杂。

我不是要求完成所有工作也许你可以给我一些关于如何构建它的提示?您会建议我使用哪些 steps/functions?然后我会尝试自己弄清楚,post结果在这里。