zOs/SQL/PARTJOIN

select     char(c.name,20) ,
           c.creator,                                char(' '),
           c.dbname,                                 char(' '),
           c.tsname,                                 char(' '),
           char(c.p_part) ,                          char(' '),
           char(c.p_limit) ,                         char(' '),
           char(coalesce(sum(cnt), 0)) tst_all,      char(' '),
           char(coalesce(sum(tstDis), 0)) tst_dist,  char(' '),
           char(coalesce(
             char(min(tid150md)) || ' '||
             char(max(tid150md)) || ' ' ||
             char(min(tstMin)) || ' ' ||
             char(max(tstMax)) || ' '
             , '<<null>>'))
  from
    ( select
         t.name, t.creator, t.dbname, t.tsname,
         p.partition p_part, int(p.limitkey) p_limit,
         q.partition q_part, int(q.limitkey) q_limnu,
         case when q.limitkey is null then -9999 else int(q.limitkey
              end q_limit
      from sysibm.systables t
        join sysibm.systablepart p
          on t.tsname = p.tsname and t.dbname = p.dbname
        left join sysibm.systablepart q
          on p.tsname = q.tsname and p.dbname = q.dbname
             and p.partition - 1 = q.partition
      where t.name = 'TID150A1' and t.creator = 'OA1P' ) c
    left join
        ( select tid150md, count(*) cnt,
              count(distinct tid150tst) tstDis,
              min(tid150tst) tstMin,  max(tid150tst) tstMax
            from OA1P.tid150a1
            group by tid150md
        ) d
      on d.tid150md <= c.p_limit and d.tid150md > c.q_limit
  group by c.p_limit, c.q_limit, c.p_part, c.q_part,
           c.name, c.creator, c.dbname, c.tsname
  order by c.p_limit, c.q_limit
           ;