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
/*
在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
/*