首页 > 解决方案 > 读取物理文件,保留最大数量并删除具有相同搜索参数的所有其他文件

问题描述

我正在做一个程序,它使用逻辑文件(交易代码、交易日期和交易金额)读取物理文件中的所有记录,检查是否有 2 个或更多具有相同交易代码和交易日期的记录,并确定最大金额是多少。我应该保留最大数量的记录并删除(删除标志='D')其他记录(具有相同的转码和转码日期)。

我如何知道金额最大的记录是什么?我的意思是,如果有1000条记录,我找到了7个相同的trans code和trans date,如果最大的是第7条记录,我如何在读取文件后删除记录1到6,文件指针转到下一条记录,对?

如果这令人困惑,我深表歉意。这也让我感到困惑。

标签: ibm-midrangerpg

解决方案


我会为这样的事情使用嵌入式 SQL。在不知道表格格式的情况下,您可以使用聚合来查找要更新的记录,如下所示:

exec sql
  update table a
    set deletecode = 'D'
    where amount <> (select max(amount) from table
                     where trancd = a.trancd);

这通过查找与正在更新max(amount)的行相同的 for 行来工作。trancd如果正在更新的行上的数量与max(amount)for that不同trancd,则继续更新deletecode,否则不要更新它。无需检查是否有两条或多条记录,因为如果只有一条记录,则将与要更新的事务上max(amount)的字段相同。amount


推荐阅读