Filter 有没有一种方法可以过滤并返回一个列的唯一性的结果,以及另一个列的条件?

Filter 有没有一种方法可以过滤并返回一个列的唯一性的结果,以及另一个列的条件?,filter,google-sheets,google-sheets-formula,array-formulas,gs-vlookup,Filter,Google Sheets,Google Sheets Formula,Array Formulas,Gs Vlookup,问题 对于下面的数据,是否有一种方法可以返回B列中每个订单的结果: 如果订单(例如订单10021)的最新状态[col D]已关闭,则返回该行 如果不是,则返回该订单自最近关闭状态以来的每一行(例如,对于订单10020,第4行和第5行) 以前的努力和尝试的解决方案 以前,我只返回一个结果,即每个订单的最新状态,包括以下内容: =SORTN(SORT(A2:D,1,FALSE),9^9,2,2,FALSE) 但是,我想知道订单是否可以有多个当前状态 我已经尝试了一些事情,并且能够实现我想要的,不

问题

对于下面的数据,是否有一种方法可以返回B列中每个订单的结果:

  • 如果订单(例如订单10021)的最新状态[col D]已关闭,则返回该行
  • 如果不是,则返回该订单自最近关闭状态以来的每一行(例如,对于订单10020,第4行和第5行)
  • 以前的努力和尝试的解决方案

    以前,我只返回一个结果,即每个订单的最新状态,包括以下内容:

    =SORTN(SORT(A2:D,1,FALSE),9^9,2,2,FALSE)
    
    但是,我想知道订单是否可以有多个当前状态

    我已经尝试了一些事情,并且能够实现我想要的,不幸的是,只有在有一个订单的情况下,才能实现以下目标:

    (下面的链接表解释了我是如何做到这一点的)

    我能想到的另一种选择是带有循环的脚本

    摘要

    我们很难知道如何命名这个问题,但最终还是解决了这个问题,因为本质上,我们正试图过滤B列的唯一性,以及反对A&D列的条件

    你可以编辑谷歌电子表格样本,显示所有的尝试

    非常感谢您的帮助和评论

    可能是这样的:

    =ARRAYFORMULA(UNIQUE(SORT({VLOOKUP(UNIQUE(INDIRECT("B2:B"&COUNTA(B2:B)+1)), 
     SORT({B2:B, TO_TEXT(A2:D)}, 2, 0), {2, 3, 4, 5}, 0); 
     FILTER(A2:D, D2:D="RETURN")},1,1)))
    

    解决方案

    这一切都归功于马特·金,他找到了一个完整的答案

    =ARRAYFORMULA(QUERY({A:D,(COUNTIFS(C:C,C:C,A:A,">="&A:A)=1)*(D:D="CLOSED")
     +NOT(REGEXMATCH(TRIM(TRANSPOSE(QUERY(IF((TRANSPOSE(A:A)<=A:A)*(TRANSPOSE(C:C)=C:C),D:D,)
     ,,9^99))),"CLOSED"))},"select Col1,Col2,Col3,Col4 where Col5=1"))
    
    =ARRAYFORMULA(查询({A:D,(COUNTIFS(C:C,C:C,A:A,“>=”&A:A)=1)*(D:D=“已关闭”)
    
    +不(REGEXMATCH)(TRIM)(TRANSPOSE)(查询)(如果)(TRANSPOSE(A:A))请添加所需的示例output@player0当然可以,添加到表格底部。如果这是你的意思,请告诉我。非常感谢你的努力!这是一个很好的选择。
    =ARRAYFORMULA(QUERY({A:D,(COUNTIFS(C:C,C:C,A:A,">="&A:A)=1)*(D:D="CLOSED")
     +NOT(REGEXMATCH(TRIM(TRANSPOSE(QUERY(IF((TRANSPOSE(A:A)<=A:A)*(TRANSPOSE(C:C)=C:C),D:D,)
     ,,9^99))),"CLOSED"))},"select Col1,Col2,Col3,Col4 where Col5=1"))
    
    =ARRAYFORMULA(QUERY({A:D,(COUNTIFS(B:B,B:B,A:A,">="&A:A)=1)*(D:D="CLOSED")+ 
     (ARRAYFORMULA(IF((ARRAYFORMULA(NOT(REGEXMATCH(TRIM(TRANSPOSE(QUERY
     (IF((TRANSPOSE(A:A)<=A:A)*(TRANSPOSE(B:B)=B:B),D:D,),,9^99))),"CLOSED"))))    
     =TRUE,IF((ARRAYFORMULA(NOT(TRANSPOSE(ARRAYFORMULA(TRANSPOSE(D:D)))="NOTE")))  
     =FALSE,FALSE,TRUE),FALSE)))},"select Col1,Col2,Col3,Col4 where Col5=1"))