Google表格:带有日期字符串的查询功能(源和返回格式相同)

时间:2018-10-13 22:10:33

标签: google-sheets google-sheets-query

我正在尝试构建一个函数,其中基于日期和名称返回某些条目。

John 10/10/18 A A A
Joe 10/10/18 A B A
John 10/10/18 A B C
John 10/11/18 A C A
Joe 10/11/18 A C C

我希望能够获得一列:

> John - 10/10/18 1) A A A 2) A B C 3) A B C
> 
> Joe - 10/10/18 1) A B A
> 
> etc

我的想法是使用unique()查找唯一的日期和唯一的名称,然后在查询中使用它们。

我的功能如下:

=query('Sample List'!$F3:AB, "select X where F = '"&A2&"' and W = '"&B2&"'" )

不幸的是,它不起作用。名称部分可以正常工作,但是日期B2的第二部分不起作用。这是令人困惑的,因为日期的格式完全相同,因此无需进行任何转换。当我将数字视为整数时,它们是完全相同的。

我尝试了各种变化:

=QUERY('Sample List'!$F3:AB,"select X where W = '"&TEXT(A2,"yyyy-mm-dd")&"'")
=QUERY('Sample List'!$F3:AB,"select X where W = date'"&B2&"'")

但是,运行查询时,不执行。知道为什么吗?

1 个答案:

答案 0 :(得分:0)

部分问题是Google表格中没有string_agg()函数,该函数存在于数据库的SQL中。这使得基于文本值而非查询中的数字值进行聚合/分组更加困难。

下面是一种可以帮助您实现所需目标的方法。它是分步完成的,您也许可以以此为基础进行自己的改进。

从A到E列开始(在我的测试表中,从第48行开始)

John    10/10/18    A   A   A
Joe     10/10/18    A   B   B
John    10/10/18    A   B   C
John    10/11/18    A   C   C
Joe     10/11/18    A   C   C

使用公式=textjoin(" ",FALSE,A48:B48)=textjoin(" ",FALSE,C48:E48) 您可以在下面的A和B栏得到它。

John 10/10/18   A A A
Joe 10/10/18    A B B
John 10/10/18   A B C
John 10/11/18   A C C
Joe 10/11/18    A C C

然后在A栏下面使用公式=sort(unique(A54:A58))

在B列中使用公式=join(" , ",filter(B$54:B$58,A$54:A$58=A60))(向下拖动以进行复制),您将获得A列和B列的下方。

Joe 10/10/18    A B B
Joe 10/11/18    A C C
John 10/10/18   A A A , A B C
John 10/11/18   A C C

现在使用=textjoin(" : ",FALSE,A60:B60)加入这些列,您将获得ColA

Joe 10/10/18 : A B B
Joe 10/11/18 : A C C
John 10/10/18 : A A A , A B C
John 10/11/18 : A C C

接近您想要的东西。

我认为最好在Javascript脚本中解决此类问题。

但是,您可以更好地将各个部分结合起来以减少步骤并尽可能使用arrayformula版本。