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 返回序列,成员分别是新增、删除和更新记录组成的序列
运行结果: