Aneesh
New User
Joined: 30 Sep 2006 Posts: 60
|
|
|
|
Hi,
I have a file (FB LRECL 280) that has the following fields.
col1 8-12 (5 bytes numeric
col2 132-142 (11 bytes - S9(6).9(3) - positive, negative or zero)
col3 150-175 (26 bytes - timestamp)
The input record can have multiple records for same value of col1. There should be only 1 record in the output file for the same value of col1. For multiple records with same value of col1, there should be only 1 record in the output file, which should be selected as the record with the highest positive value of col2, or the record with the latest date in the col3 value if there is no record with positive value (>0) for col2. For eg:
Code: |
Col1 Col2 Col3
12345 +000003.500 2008-10-26 -> record to o/p file
12345 +000001.200 2008-10-20
12345 -000003.500 2008-11-01
12346 +000000.000 2008-10-01
12346 -000003.500 2008-10-26 -> record to o/p file
12346 -000001.200 2008-10-20
12347 -000000.500 2008-10-10 -> record to o/p file
|
Is this something that can be easily done through sort?
Thanks,
Aneesh. |
|
Frank Yaeger
DFSORT Developer
Joined: 15 Feb 2005 Posts: 7129 Location: San Jose, CA
|
|
|
|
Here's a DFSORT/ICETOOL job that will do what you asked for:
Code: |
//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=... input file (FB/280)
//OUT DD DSN=... output file (FB/280)
//TOOLIN DD *
SELECT FROM(IN) TO(OUT) ON(8,5,ZD) FIRST USING(CTL1)
/*
//CTL1CNTL DD *
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(281:132,11,SFF,TO=ZD,LENGTH=9)),
IFTHEN=(WHEN=(281,9,ZD,LE,0),
OVERLAY=(281:-1,TO=ZD,LENGTH=9))
SORT FIELDS=(8,5,ZD,A,281,9,ZD,D,150,26,CH,D)
OUTFIL FNAMES=OUT,BUILD=(1,280)
/*
|
|
|