group by数据如何同时使用sum和max?

How can we use sum and max at the same time when group by data?

在JCL中按id分组时,如何同时求和和获取最大日期

输入:

Id   Amount Date
--------------------
123  200    20180516
123  300    20180520
456  100    20180616
456  700    20180420

预期结果:

Id   Amount Date
--------------------
123  500    20180520
456  800    20180616

我已经尝试过的:

SORTST5  EXEC PGM=SORT
SYSOUT   DD   SYSOUT=*
SYSPRINT DD   SYSOUT=*
SORTIN   DD   DSN=&VNTMPççWRK.INWORK,DISP=SHR
SORTOUT  DD   DSN=&VNTMP..WRK.OUTWORK.OUT.FRM,
              DISP=(,CATLG,DELETE),
              RECFM=FB,LRECL=84, SPACE=(CYL,(100,100), RLSE)
SYSIN    DD   *
SORT FIELDS=(1,3,PD,A)
SUM  FIELDS=(4,3,PD)

JCL 不是可执行文件,如果没有诸如 SORT 之类的实用程序,您将无法在 JCL 中操作日期。

我在 JCL 中使用了 ICETOOL(一个实用程序)来实现您的预​​期结果。 第一个控制语句将使用 ID(升序)和日期(降序)对输入进行排序。第二个控制语句将对使用第一个控制语句产生的输出执行 SUM FIELDS。

//STEP1    EXEC PGM=ICETOOL                    
//TOOLMSG  DD SYSOUT=*                       
//DFMSG    DD SYSOUT=*                         
//TOOLIN   DD *                               
  SORT FROM(INDD) TO(OUTDD1) USING(CTL1)    
  SORT FROM(OUTDD1) TO(OUTDD2) USING(CTL2)  
//INDD     DD *                                 
123 200 20180516                            
123 300 20180520                            
456 700 20180420                            
456 100 20180616                            
//OUTDD1   DD DSN=XXX.ICETOOL.OUTDD1,         
//         DISP=(,CATLG,DELETE),              
//         SPACE=(CYL,(100,0),RLSE),          
//         DCB=(LRECL=80,RECFM=FB,BLKSIZE=0)  
//OUTDD2   DD DSN=XXX.ICETOOL.OUTDD2,         
//         DISP=(,CATLG,DELETE),              
//         SPACE=(CYL,(100,0),RLSE),          
//         DCB=(LRECL=80,RECFM=FB,BLKSIZE=0)  
//SSMSG    DD SYSOUT=*                         
//SYSOUT   DD SYSOUT=*                        
//CTL1CNTL DD *                             
 SORT FIELDS=(1,3,ZD,A,9,8,ZD,D)            
/*                                          
//CTL2CNTL DD *                             
 SORT FIELDS=(1,3,ZD,A)                     
 SUM FIELDS=NONE                            
/*