在一条语句中同时使用 QUERY 和 FILTER?

using both QUERY and FILTER together in a single statement?

希望有人能帮助我;我正在构建一些 spreadsheets 来帮助进行时间跟踪。我有一个任务列表,其中包含日期、花费的时间、工作类别和客户等标准列。

我想按月过滤这些数据,例如我想知道我在一个月内花了多长时间在信件上。这意味着我需要 select 所有行,其中类别 = 'correspondence' 并且日期都来自一个指定的月份。目前,我不得不使用一个查询输出到一个中介 table,然后 运行 那个 table 上的一个过滤函数,以便输出到我的最终 table.这是我的两个功能:

=QUERY( 'Task List'!A4:F , "select A, B, E, F where C = 'Correspondence'" )

这给了我第一个 table,只有类别为 "Correspondence" 的行。然后,在 table 上,我必须 运行 下一个函数:

=filter(J4:M,J4:J>=date(2015,4,1),J4:J<=date(2015,4,31))

仅获取 4 月这个月的行。如果可能的话,我想删除中介 table(它没有其他用途,只会让我的 sheet 混乱)。

是否可以合并这些语句并一步完成该过程?

谢谢。

确实可以。

由于您没有指定要在哪一列中找到日期(在 'raw' 数据中),因此我假设此示例中的日期位于列 F 中。最简单的方法是使用MONTH() 函数。但是,当在 query() 中使用时,此函数将一月视为第 0 个月。这就是我添加 +1 的原因。看看这是否有效?

=QUERY( 'Task List'!A4:F , "select A, B, E, F where C = 'Correspondence' and month(F)+1 =4 ")

我遇到了这个问题,需要按 weeknum() 和 year() 进行过滤,并按 contains() 进行查询。将查询和筛选功能结合起来,以满足类似但更动态的日期和文本匹配需求。例如,如果 OP 需要按周显示此数据,那在 Google Query Language 中是不可用的。

过滤器函数没有包含函数,因此您只能使用完全匹配文本或使用 Reg-Ex。查询语言没有 Weeknum 函数。

在与此问题类似但具有动态时间轴(没有硬设置月份或日期,例如滚动时间轴)并且您匹配的文本不准确(当您需要使用a 包含来自查询语言的函数)。 这是在 Google sheet 中组合过滤器和查询的示例。

=(sum(Filter(QUERY(FB!$A:$Z, "select Q where B contains 'Apple'"), Weeknum (QUERY(FB!$A:$Z, "select E where B contains 'Apple'")) = Weeknum($A8))))

在此示例中,我查询了 Facebook 广告数据导出,以查找标题中包含单词 'Apple' 且 Weeknum() 与我的 sheet 上正在进行的周相匹配的所有帖子,以便将来自多个来源的每周数据提取到一个 table 中以构建报告,随着时间线的运行需要最少的更新。

它选择 Q(spend),其中 B(title) 包含 Apple,而 Weeknum(E) 匹配 sheet(A8) 当前行的周数。我发现这很有用很多次。 Query + Filter Example Sheet Here.

如果 OP 希望随着月份的推移动态提取此信息,如果 A 列包含月份,以便公式可以被提取,并且会自动从匹配月份过滤的查询数据中提取数据。

=(sum(Filter(QUERY( 'Task List'!A:Z , "select A, B, E, F, J where C contains 'Correspondence'" ), Month(QUERY( 'Task List'!A4:F , "select J where C contains 'Correspondence'" )) = Month('$A2'))))