问题
对于以下数据,有没有一种方法可以返回结果(针对B列中的每个订单):
先前的尝试和尝试的解决方案
以前,我只返回一个结果,即每个订单的最新状态,并显示以下内容:
=SORTN(SORT(A2:D,1,FALSE),9^9,2,2,FALSE)
但是,我想订单是否可以具有多个当前状态。
不幸的是,我尝试了几件事,并且能够实现我想要的东西,
(下面的链接表解释了我的操作方法)
=IFERROR(FILTER(A2:D5,A2:A5>INDEX(SORT(FILTER(A2:D5,D2:D5="CLOSED"),1,0),1,1)),FILTER(A2:D5,A2:A5>=INDEX(SORT(FILTER(A2:D5,D2:D5="CLOSED"),1,0),1,1)))
我能想到的另一种选择是带有循环的脚本。
摘要
很难知道如何为这个问题加上标题,因为实际上我们试图过滤条件B的唯一性,条件是针对条件A和D。
Here's a link到您可以编辑的示例Google电子表格,其中显示了所有尝试。
非常感谢您的帮助和评论!
答案 0 :(得分:1)
也许是这样的:
=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)))
答案 1 :(得分:0)
解决方案
所有归功于Matt Matt King,他找到了完整的答案。
=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"))
本质上,
产生-
请参阅解决方案here。
修改
我添加了一个子句以将状态NOTE完全从当前记录中排除—
=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"))
实施
该示例针对2500行数据进行了测试,并花费了80秒钟以上的时间来执行。因此,尽管这可以回答问题,但这不一定是可行的解决方案。