【问题标题】:Group many rows with string in google query在谷歌查询中用字符串对多行进行分组
【发布时间】:2021-12-18 01:50:47
【问题描述】:

我的谷歌查询有问题。我需要对几行进行分组,有些是重复的。

在 F2 行,我有 =ArrayFormula(query(TO_TEXT({A3:A\SE(G1:AK1>=B3:B;SE(G1:AK1<=B3:B+C3:C-1;D3:D;"*");"*")});"SELECT * where Col1 IS NOT NULL ORDER BY Col1")) 结果是:

我希望结果和下图一样:

工作表链接:enter link description here

有人有什么想法吗?非常感谢!

【问题讨论】:

  • 请与示例输入和预期输出公开分享您的工作表。
  • 我通过“拒绝访问”页面向您发送了消息,该页面返回您的链接。正如 Carlos 所提到的,请将链接权限更改为“任何知道链接的人...”和“编辑”,以便这里的志愿者贡献者可以实际访问工作表,使用您的数据测试公式并将任何工作公式留在工作表中。 (当然也可以在这里发布)。

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


【解决方案1】:

我添加了一个新工作表(“Erik 帮助”)。在单元格 F1 中可以找到以下单个数组公式:

=ArrayFormula({""\TEXT(SEQUENCE(1;DAY(EOMONTH(B3;0));EOMONTH(B3;-1)+1);"d");SORT(UNIQUE(FILTER(A3:A;A3:A<>"")))\IFERROR(VLOOKUP(VALUE(SORT(UNIQUE(FILTER(A3:A;A3:A<>"")))&SEQUENCE(1;DAY(EOMONTH(B3;0));EOMONTH(B3;-1)+1));SPLIT(UNIQUE(FLATTEN(FILTER(A3:A&(B3:B+IF(SEQUENCE(1;14;0)<C3:C;SEQUENCE(1;14;0)))&"~"&D3:D;A3:A<>"")));"~");2;FALSE))})

公式生成所有左侧标签、所有顶部标题和所有网格结果。

该公式假定工作表的 Col D 中的所有日期都在同一月/同一年(基于您发布的 1-31 的图像)。

它还假设任何事件的时间跨度都不会超过 14 天。如果任何事件超过 14 天,您需要将公式中的 14 更改为任何一个事件在每个 ID 可能跨越的最大可能天数。

进一步假设没有两个“Justificatory”标签会在每个 ID 的相同日期重叠。

这个公式的复杂性超出了这个免费的志愿者论坛的标准。我相信您会明白,除了制定公式之外,我没有时间来解释它。我鼓励你(或其他可能感兴趣的人)深入研究它,把它拆开,并独立探索它是如何工作的。

【讨论】:

    【解决方案2】:

    使用:

    =INDEX(REGEXREPLACE(TO_TEXT(QUERY(SPLIT(FLATTEN(
     IF(COLUMN(1:1)<=C3:C; A3:A&"×"&TEXT(B3:B+COLUMN(1:1)-1; 
     "yyyymmdd\¤d")&"×"&D3:D; )); "×"); 
     "select Col1,max(Col3) 
      where Col2 is not null 
      group by Col1 
      pivot Col2")); "^(.*¤)";))
    


    在第 1 行强制日期:

    =ARRAYFORMULA({IFERROR(QUERY(QUERY(SPLIT(FLATTEN(
     IF(COLUMN(1:1)<=C3:C; A3:A&"×"&B3:B+COLUMN(1:1)-1&"×"&D3:D; )); "×"); 
     "select Col1,max(Col3) where Col2 is not null group by Col1 pivot Col2"); "limit 0 label Col1'xx'"; 1)*1);
     QUERY(QUERY(SPLIT(FLATTEN(
     IF(COLUMN(1:1)<=C3:C; A3:A&"×"&B3:B+COLUMN(1:1)-1&"×"&D3:D; )); "×"); 
     "select Col1,max(Col3) where Col2 is not null group by Col1 pivot Col2"); "offset 1"; 0)})
    

    更新:

    =ARRAYFORMULA(IFERROR({IFERROR(QUERY(QUERY(SPLIT(FLATTEN(
     IF((MONTH(B3:B)=MONTH(D1))*(COLUMN(1:1)<=C3:C); A3:A&"×"&B3:B+COLUMN(1:1)-1&"×"&D3:D; )); "×"); 
     "select Col1,max(Col3) where Col2 is not null group by Col1 pivot Col2"); "limit 0 label Col1'xx'"; 1)*1);
     QUERY(QUERY(SPLIT(FLATTEN(
     IF((MONTH(B3:B)=MONTH(D1))*(COLUMN(1:1)<=C3:C); A3:A&"×"&B3:B+COLUMN(1:1)-1&"×"&D3:D; )); "×"); 
     "select Col1,max(Col3) where Col2 is not null group by Col1 pivot Col2"); "offset 1"; 0)}; "no data"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2012-01-28
      相关资源
      最近更新 更多