在Google表格查询中选择每月的第一天

时间:2018-12-08 12:03:30

标签: google-sheets google-sheets-query

我正在尝试构造一个查询,该查询将在其他列中返回一个日期,该日期位于“ rawData”表的J列中,并将该日期更改为月份的第一天。

在我的查询中,除最后一个语句外,所有日期语句都是出于测试目的。最后一个导致错误(未知范围名称:“ J”。)。有人知道错误在哪里吗?这是我的查询:

= query(rawData;“选择C,YEAR(J),MONTH(J)+1,                          日期“ 2010-08-31”,                          日期'“&TEXT(2010-10-1;” yyyy-mm-dd“)&”',                          日期'“&TEXT(CONCATENATE(” 2020-12“;”-01“);” yyyy-mm-dd“)&”',                          日期'“&TEXT(CONCATENATE(YEAR(J);”-“; MONTH(J);”-01“);” yyyy-mm-dd“)&”',                          总和(L)                       在哪里(C <>'')                         与(F = 18 OR F = 20 OR F = 62)                       按C分组,YEAR(J),MONTH(J)+1“; 1       )

谢谢, 安德烈(Andrej)

1 个答案:

答案 0 :(得分:1)

首先,请参阅《查询语言参考》的文档,特别是[Scalar Functions](https://developers.google.com/chart/interactive/docs/querylanguage#scalar-functions)的用法。此处的选项非常有限,并且似乎不允许其本身在查询中计算“月初”。

可以在rawData工作表中构建“每月的第一个月”,我将演示该过程,但是我认为您会同意,它并没有取得任何明显的优势。

尝试一下。
帮助器列P
1)在rawData中创建一个辅助列“ P”。在单元格P2中,输入以下公式:
=arrayformula(IF(ISBLANK(J2:J);"";DATE(Year(J2:J);Month(J2:J);1)))

选择整列并将其格式化为日期'yyyy-mm-dd'。
这是您的“月初日期”。为了进行识别,请在单元格P1中输入“日期yyyy-mm-dd”。

查询#1
2)创建一个新的表格进行测试。在单元格A1中输入以下公式:
=query(rawData!A2:P;"Select C, sum(L) WHERE (C<>'') AND (F=18 OR F=20 OR F=62) group by C label C 'Reg_st_vozila',sum(L) 'Total'")

这是产品代码和数量的总和,按产品代码分组;您应该有24条记录。

查询#2
3)在同一张新工作表的D1单元格中,输入此公式
=query(rawData!A2:P;"Select C, P, sum(L) WHERE (C<>'') AND (F=18 OR F=20 OR F=62) group by C,P label C 'Reg_st_vozila', P 'Date', sum(L) 'Total'")

这是产品代码和数量总和,按产品代码和“月初”日期(“帮助者”列中的日期)分组。您应该有1142条记录。

查询#3
4)在同一张新工作表的单元格H1中,输入以下公式:
=query(rawData!A2:P;"Select C, Year(J), Month(J)+1, sum(L) WHERE (C<>'') AND (F=18 OR F=20 OR F=62) group by C,Year(J),Month(J)+1 label C 'Reg_st_vozila', Year(J) 'Year', Month(J)+1 'Month', sum(L) 'Total'")

这是产品代码和数量的总和,按产品代码按年份和月份日期分组。您应该有1142条记录。
输出与前面的公式相同,尽管查询有一个额外的字段(一个表示年份,一个表示月份)。我的观点是,“第一个月”并没有取得什么特别的成就。

帮助器列Q
5)在rawData中创建第二个帮助器列“ Q”。在单元格Q2中,输入以下公式:
=arrayformula(J2:J)

选择整列并将其格式化为日期'yyyy-mm'。
这是对日期列的修改,但格式为年份-月份。 为了进行识别,请在单元格Q1中输入“日期yyyy-mm”。

查询#4
6)在新的查询表中的单元格M1中,输入以下公式:
=query(rawData!A2:Q;"Select C, Q, sum(L) WHERE (C<>'') AND (F=18 OR F=20 OR F=62) group by C,Q label C 'Reg_st_vozila', Q'Year/Month', sum(L) 'Total'")

这是产品代码和数量的总和,按年份和月份按产品代码分组。您应该有1142条记录。 输出结果与Query#2相同,但没有增加“第一个月的计算”。同样,它表明对'fom'进行分组并没有取得任何明显的优势。


enter image description here