Filter 有没有一种方法可以过滤并返回一个列的唯一性的结果,以及另一个列的条件?
问题 对于下面的数据,是否有一种方法可以返回B列中每个订单的结果: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) 但是,我想知道订单是否可以有多个当前状态 我已经尝试了一些事情,并且能够实现我想要的,不
=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"))