尝试在GoogleSheets

时间:2016-04-15 22:03:01

标签: google-sheets google-query-language

我正在使用Google表格并使用以下公式,没有任何问题:

=QUERY(Sheet!A:D,"select A, max(B) where not B is null group by A label A 'Client', max(B) 'Most Recent'")

显然,这是返回引用数据的A列和B列 但是,我还想从C列返回相应的单元格。

示例数据:https://docs.google.com/spreadsheets/d/1CJKiDNPUWMMUbLLb-UDA6iRA2PBnlMHDsEB9vELe0Rk/edit?usp=sharing

使用这个例子,我想看到的是用“Pizza”填充的单元格G2(即来自C3),依此类推。

我使用正确的配方吗?我需要改变什么?

3 个答案:

答案 0 :(得分:1)

您尝试做的不是类似SQL,因为max(B)没有指向任何特定行:它只是所选行中B的最大值。这个值可以通过几行来实现,使得C,D的选择不明确。我不认为单个查询可以做到这一点。

以下是unique和几个query命令的实现。

在E2中,输入=unique(A:A)以获取唯一客户名称列表。 在F2中,输入

=query(A:D, "select B,C,D where A ='"&E2&"' order by B desc limit 1")

并将此公式拖下来。这将选择A值与E2匹配的所有行,并选择一个具有最大B值的行。

您不希望在这些查询的输出中包含标题行,因此要么添加label B '', C '', D '',要么不要在查询范围中包含标题行。

带有C,D

分组的版本

要在单个查询中选择C和D,请展开select子句

select A, max(B), C, D 

然后需要包含group by子句中的那些:

group by A, C, D

公式将是

=QUERY(A:D,"select A, max(B), C, D where not B is null group by A, C, D label A 'Client', max(B) 'Most Recent'")

这意味着要组合在一起的唯一行将是那些不仅A而且C和D相等的行。

答案 1 :(得分:1)

这就是我最终的工作。

在E1中,输入=unique(A:A)以获取唯一客户名称列表。在F2中,输入

=query(A$2:D101, "select B,C,D where A ='"&F2&"' order by B desc limit 1")

并将此公式拖下来。这将选择A值与E2匹配的所有行,并选择一个具有最大B值的行。

您不希望在这些查询的输出中包含标题行,因此只需在标题行中添加所需的文本。

答案 2 :(得分:1)

可能的单一配方解决方案:

=ArrayFormula(IFERROR(VLOOKUP(UNIQUE(A2:A),SORT(A2:C,2,0),{1,2,3},0)))