Google 工作表查询分组依据/每组第 N 个
Google Sheets Query Group By / First-N-Per-Group
我正在尝试为 first-n-per-group.
找到一个简单的解决方案
我有一个 table 数据,第一列日期和其余数据。我想根据日期进行分组,因为允许每个日期有多个条目。对于第二列一些数字,但想要 FIRST 记录。
目前我可能使用的聚合函数是 MIN() 但它将 return 最低值而不是第一个。
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() 聚合函数,这会使这变得容易得多。
我看到了几个使用 Row Number 和 ArrayQuery 的示例,但这似乎对我不起作用。大约有 5000 行数据,因此尽可能保持高效,并且不必在任何更改时重新计算整个 sheet,每次都需要几秒钟。
目前我有这个,它附加了第三列行号:
=query({A1:B, arrayformula(row(A1:B))}, "select min(Col1),min(Col2) group by Col1")
谢谢
编辑 1
建议的解决方案是 =SORTN(A:B,2^99,2,1,1)
,这是一个干净简单的解决方案。但是,这需要大范围的 "free space" 才能显示 returned 数据集。想象一下 3000 多行。
我希望有一个基于 QUERY()
的解决方案,因为我想对结果做进一步的操作。具体来说,计算不同值的出现次数。
例如:我想要
的 returned 数据集
A B
01/01/2018 10
02/01/2018 10
03/01/2018 5
但我想计算这些值的出现次数(然后忽略日期)。例如:
B C
10 2
5 1
也许我用数字混淆了情况? ColB 中的 "data" 是 TEXT(短 3 字母代码),但是我使用数字来表明我不能使用 MIN() 函数,因为 returns 是数字上的最低值。
简而言之:
- 遍历所有行(3000 多行)并按特定日期的第一行分组
- return 该行的第一个值
- COUNT() 这些 FIRST 值的所有唯一出现次数,忽略日期。只是一个包含唯一值及其计数的列表(同样,只有任何特定日期的第一个)
=SORTN(A:B,2^99,2,1,1)
如果您的数据按照示例中的方式排序,您可以使用 SORTN() 轻松删除重复项
我正在尝试为 first-n-per-group.
找到一个简单的解决方案我有一个 table 数据,第一列日期和其余数据。我想根据日期进行分组,因为允许每个日期有多个条目。对于第二列一些数字,但想要 FIRST 记录。
目前我可能使用的聚合函数是 MIN() 但它将 return 最低值而不是第一个。
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() 聚合函数,这会使这变得容易得多。
我看到了几个使用 Row Number 和 ArrayQuery 的示例,但这似乎对我不起作用。大约有 5000 行数据,因此尽可能保持高效,并且不必在任何更改时重新计算整个 sheet,每次都需要几秒钟。
目前我有这个,它附加了第三列行号:
=query({A1:B, arrayformula(row(A1:B))}, "select min(Col1),min(Col2) group by Col1")
谢谢
编辑 1
建议的解决方案是 =SORTN(A:B,2^99,2,1,1)
,这是一个干净简单的解决方案。但是,这需要大范围的 "free space" 才能显示 returned 数据集。想象一下 3000 多行。
我希望有一个基于 QUERY()
的解决方案,因为我想对结果做进一步的操作。具体来说,计算不同值的出现次数。
例如:我想要
的 returned 数据集A B
01/01/2018 10
02/01/2018 10
03/01/2018 5
但我想计算这些值的出现次数(然后忽略日期)。例如:
B C
10 2
5 1
也许我用数字混淆了情况? ColB 中的 "data" 是 TEXT(短 3 字母代码),但是我使用数字来表明我不能使用 MIN() 函数,因为 returns 是数字上的最低值。
简而言之:
- 遍历所有行(3000 多行)并按特定日期的第一行分组
- return 该行的第一个值
- COUNT() 这些 FIRST 值的所有唯一出现次数,忽略日期。只是一个包含唯一值及其计数的列表(同样,只有任何特定日期的第一个)
=SORTN(A:B,2^99,2,1,1)
如果您的数据按照示例中的方式排序,您可以使用 SORTN() 轻松删除重复项