3.21 同序集合按原序归并计算差集

 

在结构相同的两个表中,根据字段值将其中的记录有序归并,根据需要查询不同的结果。根据版本不同的两个交易信息储存文件 new.xlsx 和 old.xlsx,分别找出新增的、删除的和修改的记录。

old.xlsx:

UserName Date SaleValue SaleCount
Rachel 2015-03-01 4500 9
Rachel 2015-03-03 8700 4
Tom 2015-03-02 3000 8
Tom 2015-03-03 5000 7
Tom 2015-03-04 6000 12
John 2015-03-02 4000 3
John 2015-03-02 4300 9
John 2015-03-04 4800 4

new.xlsx:

UserName Date SaleValue SaleCount
Rachel 2015-03-01 4500 9
Rachel 2015-03-02 5000 5
Ashley 2015-03-01 6000 5
Rachel 2015-03-03 11700 4
Tom 2015-03-03 5000 7
Tom 2015-03-04 6000 12
John 2015-03-02 4000 3
John 2015-03-02 4300 9
John 2015-03-04 4800 4

脚本:

A
1 =T(“old.xlsx”)
2 =T(“new.xlsx”)
3 =A1.sort(UserName,Date)
4 =A2.sort(UserName,Date)
5 =new=[A4,A3].merge@d(UserName,Date)
6 =delete=[A3,A4].merge@d(UserName,Date)
7 =diff=[A4,A3].merge@d(UserName,Date,SaleValue,SaleCount)
8 =update=[diff,new].merge@d(UserName,Date)
9 return [new, delete, update]

A1 读取早一点的数据表
A2 读取晚一点的数据表
A3 数据表按用户名和日期排序
A4 数据表按用户名和日期排序
A5 使用 merge 函数的 @d 选项,有序归并时从 A4 中去掉 A3 中包含的记录,剩下的是新增记录组成的序列
A6 使用 merge 函数的 @d 选项,有序归并时从 A3 中去掉 A4 中包含的记录,剩下的是删除记录组成的序列
A7 使用 merge 函数的 @d 选项,有序归并时从 A4 中去掉 A3 中发生变化(有字段值不同)的记录
A8 使用 merge 函数的 @d 选项,有序归并时从发生变化的记录中去掉新增记录,剩下的是更新记录组成的序列
A9 返回序列,成员分别是新增、删除和更新记录组成的序列

运行结果:

imagepng