select 工作表查询中 google 月份的第一天

select first day of month in google sheets query

我正在尝试构建一个查询,该查询将在 return 其他列中添加一个日期,该日期位于 "rawData" table 的 J 列中,并将此日期更改为第一天一个月。

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

=query(rawData;"select 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 或 F=20 或 F=62) 按 C、YEAR(J)、MONTH(J)+1";1 分组 )

谢谢, 安德烈

首先,请参阅查询语言参考文档,特别是 [标量函数] (https://developers.google.com/chart/interactive/docs/querylanguage#scalar-functions) 的使用。此处的选项非常有限,并且似乎不允许在查询中计算 'first of the month' 本身。

可以在原始数据 sheet 中构建 'first of the month',我将演示该过程,但我认为您会同意它没有实现任何可察觉的优势.

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

Select 整个列并将其格式化为日期 'yyyy-mm-dd'.
这是你的"first of the month date"。为了识别,在单元格 P1 中输入 "Date yyyy-mm-dd"。

查询#1
2) 创建一个新的 sheet 用于测试。在单元格 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) 在同一个新 sheet 中,在单元格 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'")

这是产品代码和数量总和,按产品代码和月初日期(Helper Column 中的日期)分组。你应该有 1142 条记录。

查询#3
4) 在同一个新 sheet 中,在单元格 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 条记录。
输出与前面的公式相同,但查询有一个额外的字段(一个用于年,一个用于月)。我的观点是 'first of month' 没有取得任何特别的成就。

辅助列 Q
5) 在 rawData 中创建第二个辅助列 "Q"。在单元格 Q2 中,输入此公式:
=arrayformula(J2:J)

Select 整个列并将其格式化为日期 'yyyy-mm'.
这是对日期列的修改,但格式为年月。 为了识别,在单元格 Q1 中输入 "Date yyyy-mm"。

查询#4
6) 在新查询 sheet 中,在单元格 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 条记录。 输出与查询#2 相同,但没有计算“第一个月”的复杂性。再次表明,在 'fom' 上分组没有取得任何可察觉的优势。