本帖最后由 shaowu459 于 2023-4-24 20:34 编辑
涉及分组运算的,都可以考虑下SCAN函数。例如以下题目,使用SCAN函数为每组编号,然后筛选出每组第一个值和最后一个值合并在一起。
- =LET(s,TOCOL(--(A3&-A1&-ROW(1:31)),3),t,SCAN(0,s,LAMBDA(x,y,x+(MOD(y,7)=2))),DROP(REDUCE(0,UNIQUE(t),LAMBDA(x,y,VSTACK(x,TEXTJOIN("-",,TEXT(XLOOKUP(y,t,s,,,{1,-1}),"mm/dd"))))),1))
复制代码
如果定义p=filter(s,t=y),可以使用@p获取每组第一个值,take(p,-1)获取每组最后一个值。如果是递增数字,本例可以使用max(p)获取每组最后一个日期。
本例日期特殊,可以使用weeknum来作为分组依据:
- =LET(s,TOCOL(--(A3&-A1&-ROW(1:31)),3),t,WEEKNUM(s,2),DROP(REDUCE(0,UNIQUE(t),LAMBDA(x,y,VSTACK(x,TEXTJOIN("-",,TEXT(XLOOKUP(y,t,s,,,{1,-1}),"mm/dd"))))),1))
复制代码
|