【问题标题】:Is there any query string that I can use with the QUERY function to get a group-wise maximum?是否有任何查询字符串可以与 QUERY 函数一起使用来获得分组最大值?
【发布时间】:2022-09-27 16:32:23
【问题描述】:

我知道如何将 QUERY 函数中的 GROUP BY 子句与单个或多个字段一起使用。这可以返回每个分组的单行,其中一个字段具有最大值。

This page 使用这些查询和图像很好地解释了它:

=query({A2:B10},\"Select Col1,min(Col2) group by Col1\",1)

=query({A14:C22},\"Select Col1,Col2,min(Col3) group by Col1,Col2\",1)

但是,如果我只想要一个返回最新行的相应值并按多个字段分组的查询,该怎么办?有没有可以做到这一点的查询?

例子

源表

created_at first_name last_name email address city st zip amount
4/12/2022 19:15:00 Ava Anderson ava@domain.com 123 Main St Anytown IL 12345 1.00
8/30/2022 21:38:00 Brooklyn Brown bb@domain.com 234 Lake Rd Baytown CA 54321 2.00
2/12/2022 16:58:00 Ava Anderson ava@new.com 123 Main St Anytown IL 12345 3.00
4/28/2022 01:41:00 Brooklyn Brown brook@acme.com 456 Ace Ave Bigtown NY 23456 4.00
5/03/2022 17:10:00 Brooklyn Brown bb@domain.com 234 Lake Rd Baytown CA 54321 5.00

期望的查询结果

按 first_name、last_name、address、city、st 和 zip 分组,但返回 created_at、email 和金额为 created_at 的最大(最近)值:

created_at first_name last_name email address city st zip amount
4/12/2022 19:15:00 Ava Anderson ava@domain.com 123 Main St Anytown IL 12345 1.00
8/30/2022 21:38:00 Brooklyn Brown bb@domain.com 234 Lake Rd Baytown CA 54321 2.00
4/28/2022 01:41:00 Brooklyn Brown brook@acme.com 456 Ace Ave Bigtown NY 23456 4.00

在 Google 表格中可以进行这样的查询吗?

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


    【解决方案1】:

    使用这个公式

    =QUERY({QUERY(A1:I, " Select max(A),min(B),min(C),min(D),min(E),min(F),min(G),min(H),min(I) Group by B,C,E,F,G,H ", 1)},
                        " Select *  Where Col1 is Not null ")
    

    【讨论】:

    • 这不完全是。在示例表中,我有三个不同的人,由姓名和地址确定;两个碰巧同名。我想获取三个唯一个人中每个人的最新记录(包括电子邮件和金额)。我发现如果我使用=QUERY(A1:I, "select max(A),B,C,E,F,G,H group by B,C,E,F,G,H", 1),那么我会正确地将数据减少到适当的个人集合,但我不知道如何将这些数据与每个人的最新记录结合起来。
    【解决方案2】:

    我相信这是您需要的公式:

    =ARRAY_CONSTRAIN(SORTN(SORT(
         QUERY({A1:I9,INDEX(IFERROR(REGEXEXTRACT(D1:D9,"(\D+)@")))},
                    "where Col2 is not null"),
                                    10,1,1,0),9^9,2,10,1),9^9,9)
    

    (做调整根据您的范围和区域设置的公式)

    为了使公式起作用,我们创建了辅助列
    INDEX(IFERROR(REGEXEXTRACT(D1:D9,"(\D+)@")))
    我们还使用 9^9 等于 387420489 行,确保所有行都包含在我们的排序计算中。
    最后,在我们的ARRAY_CONSTRAIN 函数中,我们返回前 9 列,丢弃第 10 个辅助列。

    使用的功能:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      相关资源
      最近更新 更多