Google表格查询分组依据/每组第一个

时间:2018-09-09 08:50:23

标签: google-sheets google-query-language google-sheets-query

我正在尝试为每组第一个人找到一个简单的解决方案。

我有一个数据表,第一列日期和其余数据。我想根据日期进行分组,因为每个日期都允许有多个条目。对于第二列,有些数字,但需要 FIRST 记录。

当前我可能使用的聚合函数是MIN(),但它将返回最小值而不是第一个。

A            B
01/01/2018   10
01/01/2018   15
02/01/2018   10
02/01/2018   2
02/01/2018   100
02/01/2018   20
03/01/2018   5
03/01/2018   2

所需的输出

A            B
01/01/2018   10
02/01/2018   10
03/01/2018   5

使用MIN()的当前结果-不需要

A            B
01/01/2018   10
02/01/2018   2
03/01/2018   2

可惜Google表格中没有FIRST()聚合函数,这会使此操作变得容易得多。

我看到了一些使用行号和ArrayQuery的示例,但这似乎对我不起作用。大约有5000行数据,因此尝试保持尽可能高的效率,而不必进行任何更改就重新计算整个工作表,每一次都需要几秒钟。

目前,我有这个,它在第三列后面附加了行号:

=query({A1:B, arrayformula(row(A1:B))}, "select min(Col1),min(Col2) group by Col1")

谢谢


编辑1


建议的解决方案是=SORTN(A:B,2^99,2,1,1),这是一个简单的解决方案。但是,这需要很大范围的“可用空间”来显示返回的数据集。想象一下3000多行。

我希望基于QUERY()的解决方案,因为我想对结果进行进一步的操作。具体来说,请计算不同值的出现次数。

例如:我想要一个返回的数据集

A            B
01/01/2018   10
02/01/2018   10
03/01/2018   5

但是我想计算这些值的出现(然后忽略日期)。例如:

B    C
10   2
5    1

也许我通过使用数字混淆了情况? ColB中的“数据”是TEXT(短3个字母代码),但是我使用数字表示无法使用MIN()函数,因为它返回了数值的最小值。

简而言之:

  • 遍历所有行(3000多个行),并按特定日期的第一行分组
  • 返回该行的FIRST值
  • COUNT()这些FIRST值的所有唯一出现,而不考虑日期。只是一个包含唯一值及其计数的列表(同样,仅是特定日子的第一天)

1 个答案:

答案 0 :(得分:3)

=SORTN(A:B,2^99,2,1,1)

如果您的数据按照示例中的顺序排序,则可以使用SORTN()轻松删除重复项