I have as input the sequential file containing the following data:
//IN DD *
BBBBBBBB C 20220301 MADRID
AAAAAAAA A 20220302 PARIS
AAAAAAAA B 20220302 LONDRES
AAAAAAAA D 20220101 DUBLIN
AAAAAAAA E 20220101 ROME
CCCCCCCC F 19000301 STOCKOLM
AAAAAAAA G 20201225 COPENHAGUE
CCCCCCCC F 19010301 ATHENES
/*
In 1(8) An ID
In 9(3) It doesn't matter
In 12(8) A date
In 20(20) City
Whatever what I except : All ID of the most recent date
//OUT DD *
AAAAAAAA A 20220302 PARIS
AAAAAAAA B 20220302 LONDRES
BBBBBBBB C 20220301 MADRID
CCCCCCCC F 19010301 ATHENES
/*
3. Try to apply the knowledge from 1-2 to your issue.
4. If something remains unclear, then present your code at the forum (do not forget about #0), including all input, output, the code itself, and error log.
I have as input the sequential file containing the following data:
Code:
//IN DD *
BBBBBBBB C 20220301 MADRID
AAAAAAAA A 20220302 PARIS
AAAAAAAA B 20220302 LONDRES
AAAAAAAA D 20220101 DUBLIN
AAAAAAAA E 20220101 ROME
CCCCCCCC F 19000301 STOCKOLM
AAAAAAAA G 20201225 COPENHAGUE
CCCCCCCC F 19010301 ATHENES
/*
In 1(8) An ID
In 9(3) It doesn't matter
In 12(8) A date
In 20(20) City
Whatever what I except : All ID of the most recent date
Code:
//OUT DD *
AAAAAAAA A 20220302 PARIS
AAAAAAAA B 20220302 LONDRES
BBBBBBBB C 20220301 MADRID
CCCCCCCC F 19010301 ATHENES
/*
//SORTING EXEC PGM=SORT
. . . . .
//DEBUG DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SORTIN DD *
BBBBBBBB C 20220301 MADRID
BBBBBBBB D 20220301 CHICAGO
AAAAAAAA A 20220302 PARIS
AAAAAAAA B 20220302 LONDRES
AAAAAAAA D 20220101 DUBLIN
AAAAAAAA E 20220101 ROME
CCCCCCCC F 19000301 STOCKOLM
AAAAAAAA G 20201225 COPENHAGUE
CCCCCCCC F 19010301 ATHENES
//*-+----1----+----2----+----3----+----4----+----5
//*
//SYSIN DD *
SORT FIELDS=(1,8,CH,A,
12,8,CH,D, the latest date to come first
10,1,CH,A,
21,20,CH,A)
OUTREC IFTHEN=(WHEN=GROUP,
KEYBEGIN=(1,8),
PUSH=(81:1,8, keep same ID
91:12,8)) keep same date
OUTFIL FNAMES=DEBUG - just to verify intermediate table
OUTFIL FNAMES=SORTOUT,
INCLUDE=(1,8,CH,EQ,81,8,CH,
AND,12,8,CH,EQ,91,8,CH),
BUILD=(1,80) truncate to original record size
//*