1

我使用 Google Sheets SQL-ish Query函数来汇总我的许多电子表格中的数据。这多年来一直运作良好,尽管速度很慢。

今天,我的一些查询遇到了问题 - 特别是一些将源数据中的日期与TODAY().

为了演示,这里有一个共享电子表格的链接,我用它来重现假数据的问题。

编辑:示例已根据 AdamL 的建议进行了更新。

在此处输入图像描述

源数据在 range 中A1:D6,包含“序列号”、“类型”、“位置”和“保修到期”列。最后一列是日期。

这个函数A9总结了所有数据:

=query(A1:D6,"select B, count(A) group by B pivot C")

...像这样:

=查询(A1:D6,

事情就是这样。如果我尝试使用WHEREand进行过滤DATE(),查询似乎完全崩溃了。我想要的是一个看起来像上面的表,但只包括D在过去的列中有日期的数据行。

=query(A1:D6,"select B, count(A) where D < now() group by B pivot C")

=查询(A1:D6,

如果我将过滤器更改为不涉及日期的内容,我会得到预期的输出:

=查询(A1:D6,

我怎样才能得到这个给我我想要的总结?

4

1 回答 1

3

now()标量函数返回一个日期时间值,并且您在源数据中有日期值。不幸的是,两者之间的比较将失败。解决方法是将 now() 转换为日期值:

=QUERY(A1:D6;"select B, count(A) where D < toDate(now()) group by B pivot C")


顺便说一句,QUERY 函数存在一个限制(错误?),因此 now() 标量函数不会(必然)在电子表格的时区中运行,并且似乎没有任何修改方法行为。我相信 now() 标量函数将始终以太平洋夏令时间(例如美国西海岸)返回当前时间。所以对我来说,现在在澳大利亚布里斯班,QUERY 选择子句中使用的 toDate(now()) 返回昨天的日期。

更安全的选择是使用电子表格函数生成今天的日期,并将其连接到 QUERY 子句中:

=QUERY(A1:D6;"select B, count(A) where D < date '"&TEXT(GoogleClock();"yyyy-MM-dd")&"' group by B pivot C")

于 2013-04-22T22:23:10.787 回答