按组中第二条记录的数据对记录组进行排序

Posted

技术标签:

【中文标题】按组中第二条记录的数据对记录组进行排序【英文标题】:Sort groups of records by data on the second record in a group 【发布时间】:2015-05-18 23:47:28 【问题描述】:

我正在尝试对一组记录进行排序。 (即)按日期在第二行 第一行中的“100”是记录的开始。 “BBB”是记录的第二行。 “CCC”是记录的第三行。

输入:

100 AAAAA AAAA AAAA AAAAAAA 
    BBBBB BBBB BBB START :05/01/2014 AT 05:00:00 
          CCCC CCCC CCCC CCCC .
200  AAAA1 AAAA1 AAAA AAAAAAA   
     BBBBB1 BBBB BBB START :01/01/2014 AT 05:00:00 
          CCCC1 CCCC CCCC CCCC . 

我需要输出为

200  AAAA1 AAAA1 AAAA AAAAAAA    
     BBBBB1 BBBB BBB START :01/01/2014 AT 05:00:00 
          CCCC1 CCCC CCCC CCCC .
100 AAAAA AAAA AAAA AAAAAAA 
    BBBBB BBBB BBB START :05/01/2014 AT 05:00:00 
          CCCC CCCC CCCC CCCC . 

请提供有关如何获得上述输出的任何建议。

【问题讨论】:

对于大型机问题,最好包含大型机标签。这会更早看到。 【参考方案1】:

假设:您的组是有规律的(三个记录,始终按此顺序); RECFM F/FB(甚至 FBS); LRECL 80(通常不会“太大”)。

对于第二条和第三条记录,可以轻松使用 IFTHEN=(WHEN=GROUP 将日期从第二条记录传播到第三条记录。

这对第一张唱片有什么帮助?没有。因此,相反,在识别组的第一条记录时,扩展记录并将第一条记录复制到第二条记录。

现在您只需要第二条和第三条记录(因为第二条包含第一条)。

您将需要 OUTFIL 来排除原始第一条记录并创建新的第一条记录(使用斜杠运算符 /)。

  OPTION EQUALS
  INREC IFTHEN=(WHEN=GROUP,
                  BEGIN=(1,1,CH,NE,C' '),
                  RECORDS=2,
                  PUSH=(81:SEQ=1,1,80)),
         IFTHEN=(WHEN=INIT,
                  BEGIN=(81,1,CH,EQ,C'2'),
                  RECORDS=2,
                  PUSH=(162:startposofdate,lengthofdate))
   SORT FIELDS=(162,length-of-date,CH,A)
   OUTFIL OMIT=(81,1,CH,EQ,C'1'),
          IFTHEN=(WHEN=(81,1,CH,EQ,C'2').
                    BUILD=(82,80,
                           /,
                           1,80)),
          IFTHEN=(WHEN=NONE,
                    BUILD=(1,80))

这是一个大纲。等待更多细节......

【讨论】:

以上是关于按组中第二条记录的数据对记录组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 GroupBy 仅向我返回每个组的第一条记录,但我需要按组中的所有记录

希尔排序

希尔排序

希尔排序

ORACLE 查询去重保留第一条排序

从每个组中获取最新记录