识别并删除三列中的重复项,保留最旧的- Excel

envsm3lx  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(143)

我希望识别具有相同"CustomerName""ZipCode"和"DOB"的重复项,并仅保留具有最早"Date"的记录。
例如,在下面,我想删除第二个John Smith记录,因为它是较新的记录。
| 交易ID|日期|客户名称|邮政编码|出生日期|电子邮件|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 5X42|2018年4月13日|约翰·史密斯|小行星90210|1987年11月23日|www.example.comjohnsmith@gmail.com|
| 7年5次|2021年1月27日|约翰·史密斯|小行星90210|1987年11月23日|www.example.comjohnsmith@gmail.com|
| 28N2|2020年11月17日|玛丽·琼斯|小行星56451|1991年5月16日|www.example.commaryjones@gmail.com|
我曾尝试使用MAXIFS(),但运气有限。

q8l4jmvw

q8l4jmvw1#

您可以通过按同一组中的Date列进行排名来实现,其中组由具有相同主键的行表示。在您的情况下,是以下列的组合:* * 客户名称**、邮政编码出生日期。您可以在单元格A6中使用以下公式:

=LET(in, A2:F4,pks, INDEX(in,,3)&"_"&INDEX(in,,4)&"_"&INDEX(in,,5),
 dates, INDEX(in,,2), rnk, MAP(pks, dates,LAMBDA(pk,d, 
  SUM((pks=pk) * (dates < d))+1)), FILTER(in, rnk=1))

下面是输出:

名称rnk对同一组中的每个元素进行排序,将值1分配给最早的日期。这种方法不需要对数据进行排序,SUM计算可以确保这一点。因此,输出与输入的顺序相同,只是删除了重复项。

    • 注意**:在这种情况下,由于分隔符(_)不能出现在日期或邮政编码中,因此串联(以构建主键的方式)不会有误报的风险。请查看@JvdV对此问题的回答的注解部分:Finding pairs of cells in two columns。为了好玩,我们可以避免使用连接,并保持相同的方法,通过MMULT来标识每行的组(grs),其中grId是组ID,在我们的情况下,我们只有12
=LET(in, A2:F4, pks, CHOOSECOLS(in,3,4,5), n, COLUMNS(pks), dates, INDEX(in,,2),
 ux, UNIQUE(pks), grId, SEQUENCE(ROWS(ux)), ones, SEQUENCE(n,,1,0),
 grs, BYROW(pks, LAMBDA(pk, FILTER(grId, MMULT(N(pk=ux), ones)=n))),
 rnk, MAP(grs, dates,LAMBDA(g,d, SUM((grs=g)*(dates < d))+1)),FILTER(in,rnk=1))

注意,这种方法不需要对输入数据进行排序。

vnjpjtjt

vnjpjtjt2#

基于多列删除重复项

=LET(tData,A1:F4,DateColumn,2,UniqueColumns,{3;4;5},Delimiter,"|!|",
    Head,TAKE(tData,1),Data,DROP(tData,1),rSeq,SEQUENCE(ROWS(Data)),
    Sorted,SORT(HSTACK(rSeq,Data),DateColumn+1),uData,CHOOSECOLS(Sorted,UniqueColumns+1),
    jData,BYROW(uData,LAMBDA(uRow,TEXTJOIN(Delimiter,,uRow))),rIndexes,XMATCH(UNIQUE(jData),jData),
    rData,INDEX(Sorted,rIndexes,SEQUENCE(,COLUMNS(Sorted))),
VSTACK(Head,DROP(SORT(rData,1),,1)))

要点

  • 将常量写入变量。
  • 使用 TAKEDROP 返回数组中的标头(Head)和数据(Data)。
  • 使用 SEQUENCE 返回数组(rSeq)中的升序整数序列。
  • 使用 HSTACK 将数据堆叠到其中,跟踪顺序,并按日期列升序(Sorted)对其进行排序。
  • 使用 CHOOSECOLS 返回数组(uData)中的唯一列。
  • BYROWTEXTJOIN 配合使用可返回单列数组(jData)中连接的唯一列。
  • 使用 XMATCHUNIQUE 返回唯一行索引数组(rIndexes)。
  • 对排序后的数据使用 INDEX 和行索引以删除重复项(rData)。
  • 通过按堆栈整数序列列(1)对数据进行升序排序,恢复初始顺序。
  • 删除列并将数据堆叠到标题(Head)。

相关问题