Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets Google Sheets查询分组依据/First-N-Per-Group_Google Sheets_Google Query Language_Google Sheets Query - Fatal编程技术网

Google sheets Google Sheets查询分组依据/First-N-Per-Group

Google sheets Google Sheets查询分组依据/First-N-Per-Group,google-sheets,google-query-language,google-sheets-query,Google Sheets,Google Query Language,Google Sheets Query,我正在尝试为每组第一个n个找到一个简单的解决方案 我有一个数据表,第一列日期和其他数据。我想根据日期分组,因为每个日期允许多个条目。对于第二列,需要一些数字,但需要第一个记录 目前我可能使用的聚合函数是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

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

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

目前我可能使用的聚合函数是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 Sheets中没有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中的“数据”是文本(短的3个字母代码),但是我用数字表示我不能使用MIN()函数,因为它返回的是数值最低的值

简言之:

  • 浏览所有行(3000多行)并按特定日期的第一行分组
  • 返回该行的第一个值
  • COUNT()第一个值的所有唯一出现,不考虑日期。只是一个包含唯一值及其计数的列表(同样,仅限任何特定日期的第一个)

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

Perfect。即使数据没有按图中所示进行排序,它也会工作吗?因为顺序在每个日期内都会保留下来。它工作得很好,谢谢。我问这个问题的初衷是希望得到一个QUERY()解决方案,因为我计划使用结果集并按每个返回值分组,并返回一个COUNT()唯一值…我还认为这个问题和其他类似的问题可以得到更简单的回答@Jammo您可以将这个查询嵌套在内部<代码>=查询(sortn(),“选择…”)
=SORTN(A:B,2^99,2,1,1)