Google 工作表:select 组内使用 QUERY 的前 N ​​个案例

Google Sheets: select top N cases within groups using QUERY

我要举报:"select salesmen who have N recent Status codes = 2,3,4,5".

我的数据结构示例有 35 行(包括 1 header 行): link。 此文件有日期销售代码(销售人员的 ID)、状态代码(销售人员的 ID交易的成功程度)以及其他不需要的字段。

我最终使用了三个公式:

  1. a QUERY 函数与 IMPORTRANGE.
    在示例数据中,它稍微简单一些 - 仅从另一个获取销售代码、状态代码和日期sheet,然后按日期、销售代码订购。 A9中的公式:
    =QUERY({Source!D1:E, Source!A1:A}, $B, 1)

  2. 一个带有连续编号的附加栏。 D10 中的公式:
    =ArrayFormula(if(len(A10:A), ROW(A10:A) - MATCH(A10:A,A10:A,0) - 8, ))

  3. 一个 QUERY 函数只提取 N 个案例(假设是 5 个)。 F9 中的公式:
    =QUERY(A9:D, "select A, B where D <="&B3, 1)

有没有一种方法可以将所有 3 个步骤合并为一个,这样我就可以使用一个(希望是快速的 :))公式得到像 F10:G24 中那样的输出?我试过的公式(为便于阅读而扩展):

=QUERY(
    {
      QUERY({Source!D1:E, Source!A1:A}, $B, 1),
      ArrayFormula(
         IF(len(J10:J),
            ROW(J10:J) - MATCH(J10:J, J10:J, 0) - 8,
         )
      )
    },
    "select Col1, Col2 where Col4 <="&B3,
    1
)

它给我错误:

"Function ARRAY_ROW parameter 2 has mismatched row size. Expected: 28. Actual: 991."

我还在 ROW()MATCH() 中尝试了有限的数据范围,但这会产生一个空的 table。 在原始数据库中有 ~3500 行并且它们会扩展,所以我认为我应该坚持无限范围以自动提取数据。

嗯,这有点像噩梦 TBH - 之前出现过类似的问题,但没有简单的答案。这是一份草稿,其中涉及多次重复基本查询 -

=ArrayFormula(query({query(A2:E,"select * where E>=2 and E<=5  order by D, A desc"),
row(indirect("2:"&count(filter(E2:E,E2:E>=2,E2:E<=5))+1))-
match(query(A2:E,"select D where E>=2 and E<=5  order by D, A desc"),
query(A2:E,"select D where E>=2 and E<=5  order by D, A desc"),0)
},"select * where Col6<=5"))

但需要进一步查看是否可以简化。

这是 full-column 版本,包括 headers - 我觉得还可以

=ArrayFormula(query({query(A:E,"select * where E>=2 and E<=5  order by D, A desc"),
row(indirect("1:"&count(filter(E:E,E:E>=2,E:E<=5))+1))+1-
match(query(A:E,"select D where E>=2 and E<=5  order by D, A desc"),
query(A:E,"select D where E>=2 and E<=5  order by D, A desc"),0)
},"select * where Col6<=5"))