MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Keeping the highest version for a key

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
jeff001
Beginner


Joined: 16 Feb 2005
Posts: 2
Topics: 1

PostPosted: Wed Feb 16, 2005 5:17 am    Post subject: Keeping the highest version for a key Reply with quote

Hi,

i need to keep the records with the highest version number for a particular key in my output.
My key starts at position 1 and is of lenghth 13 while the version number starts at position 14.



My input file look like this

555555555555501
555555555555501
555555555555502
555555555555502
555555555555503
666666666666601
666666666666601
666666666666602
666666666666602
666666666666602

My output file should have the

555555555555503
666666666666602
666666666666602
666666666666602


Is it possible to do it by using MAX option in SORT?

Thanks
-jeff
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12376
Topics: 75
Location: San Jose

PostPosted: Wed Feb 16, 2005 11:12 am    Post subject: Reply with quote

Jeff,

The following DFSORT/ICETOOL jcl will give you the desired results. If you have syncsort at your shop then change the pgm name to synctool. I assumed that your input has the following attributes

lrecl= 80 , recfm = fb

Code:

//STEP0100 EXEC PGM=ICETOOL                                         
//TOOLMSG  DD SYSOUT=*                                             
//DFSMSG   DD SYSOUT=*                                             
//IN       DD *                                                     
555555555555501                                                     
555555555555501                                                     
555555555555502                                                     
555555555555502                                                     
555555555555503                                                     
666666666666601                                                     
666666666666601                                                     
666666666666602                                                     
666666666666602                                                     
666666666666602                                                     
//T1       DD DSN=&T1,DISP=(,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//T2       DD DSN=&T2,DISP=(,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//CON      DD DSN=&T1,DISP=OLD,VOL=REF=*.T1                         
//         DD DSN=&T2,DISP=OLD,VOL=REF=*.T2                         
//OUT      DD SYSOUT=*                                             
//TOOLIN   DD *                                                     
  SORT   FROM(IN) USING(CTL1)                                       
  SPLICE FROM(CON) TO(OUT) -                                       
           ON(1,15,CH) -                                           
           WITH(1,80) -                                             
           WITHALL USING(CTL2)                                     
//CTL1CNTL DD *                                                     
  SORT FIELDS=(01,13,CH,A,  $ KEY                                   
               14,02,CH,A)  $ VERSION                               
  OUTREC FIELDS=(1,80,15X)                                         
  OUTFIL FNAMES=T1,REMOVECC,NODETAIL,                               
  SECTIONS=(1,13,TRAILER3=(1,80,MAX=(01,15,ZD,M10,LENGTH=15)))     
  OUTFIL FNAMES=T2                                                 
//CTL2CNTL DD *                                                     
  OUTFIL FNAMES=OUT,INCLUDE=(1,15,CH,EQ,81,15,CH),                 
  OUTREC=(1,80)                                                     
/*                                                                 


Hope this helps...

Cheers

Kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
jeff001
Beginner


Joined: 16 Feb 2005
Posts: 2
Topics: 1

PostPosted: Thu Feb 17, 2005 3:59 am    Post subject: Reply with quote

Kolusu,

That was great !!!....Thanks a lot

But it is working for only those keys which are numeric.
i m not getting the desired result if the key is something like
'AKT5555555555'.

Regards
-jeff
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12376
Topics: 75
Location: San Jose

PostPosted: Thu Feb 17, 2005 8:39 am    Post subject: Reply with quote

Quote:

But it is working for only those keys which are numeric.
i m not getting the desired result if the key is something like
.


jeff01,

I suggested the solution based on the sample data you provided. Since your key also had character data, the solution will not work. Try this JCL which takes care of the character data also.

Code:

//STEP0100 EXEC PGM=ICETOOL     
//TOOLMSG  DD SYSOUT=*           
//DFSMSG   DD SYSOUT=*           
//IN       DD *                 
555555555555501                 
555555555555501                 
555555555555502                 
555555555555502                 
555555555555503                 
666666666666601                 
666666666666601                 
666666666666602                 
666666666666602                 
666666666666602                 
AKT555555555501                 
AKT555555555502                 
AKT555555555503                 
AKT555555555504                 
AKT555555555504                 
AKT555555555504                 
AKT555555555504                 
AKT555555555504                 
//T1       DD DSN=&T1,DISP=(,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//T2       DD DSN=&T2,DISP=(,PASS),UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE)
//CON      DD DSN=&T1,DISP=OLD,VOL=REF=*.T1                         
//         DD DSN=&T2,DISP=OLD,VOL=REF=*.T2                         
//OUT      DD SYSOUT=*                                             
//TOOLIN   DD *                                                     
  SORT   FROM(IN) USING(CTL1)                                       
  SPLICE FROM(CON) TO(OUT) -                                       
           ON(1,13,CH) -                                           
           WITH(1,80) -                                             
           WITHALL USING(CTL2)                                     
//CTL1CNTL DD *                                               
  SORT FIELDS=(01,13,CH,A,  $ KEY                             
               14,02,CH,A)  $ VERSION                         
  OUTREC FIELDS=(1,80,2X)                                     
  OUTFIL FNAMES=T1,REMOVECC,NODETAIL,                         
  SECTIONS=(1,13,TRAILER3=(1,80,MAX=(14,02,ZD,M11,LENGTH=02)))
  OUTFIL FNAMES=T2                                           
//CTL2CNTL DD *                                               
  OUTFIL FNAMES=OUT,INCLUDE=(14,02,CH,EQ,81,02,CH),           
  OUTREC=(1,80)                                               
/*                                                           


Hope this helps...

Cheers

kolusu
_________________
Kolusu
www.linkedin.com/in/kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Frank Yaeger
Sort Forum Moderator
Sort Forum Moderator


Joined: 02 Dec 2002
Posts: 1618
Topics: 31
Location: San Jose

PostPosted: Thu Feb 17, 2005 12:53 pm    Post subject: Reply with quote

Here's another way to do it with the new KEEPBASE parameter of DFSORT's ICETOOL available with z/OS DFSORT V1R5 PTF UQ95214 or DFSORT R14 PTF UQ95213 (Dec, 2004). For complete information on all of the new DFSORT and ICETOOL functions available with the Dec, 2004 PTF, see:

www.ibm.com/servers/storage/support/software/sort/mvs/pdug/

Code:

//S1    EXEC  PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD DSN=...  input file
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//T2 DD DSN=&&T2,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//CON DD DSN=*.T1,VOL=REF=*.T1,DISP=(OLD,PASS)
//    DD DSN=*.T2,VOL=REF=*.T2,DISP=(OLD,PASS)
//OUT DD DSN=... output file
//TOOLIN DD *
* IN->T1:  Last record with each 1,13 key - add '11' id at end
* IN->T2:  Discarded records - add '22' id at end
  SELECT FROM(IN) TO(T1) ON(1,13,CH) LAST DISCARD(T2) USING(CTL1)
* T1/T2->OUT:  Splice records and first byte of id - omit records
* with '22' id.  Remove id.
  SPLICE FROM(CON) TO(OUT) ON(1,15,CH) -
   WITHALL WITH(1,81) KEEPBASE KEEPNODUPS USING(CTL2)
/*
//CTL1CNTL DD *
  SORT FIELDS=(1,13,CH,A,14,2,CH,A)
  OUTFIL FNAMES=T1,OUTREC=(1,80,81:C'11')
  OUTFIL FNAMES=T2,OUTREC=(1,80,81:C'22')
/*
//CTL2CNTL DD *
  OUTFIL FNAMES=OUT,OMIT=(81,2,CH,EQ,C'22'),
    OUTREC=(1,80)
/*

_________________
Frank Yaeger - DFSORT Development Team (IBM)
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
DFSORT is on the Web at:
www.ibm.com/storage/dfsort
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group