首页 文章

如何按顺序找到最高记录

提问于
浏览
0

我需要使用multipart键连接两个表,只选择序列号最高的第二个表中的记录(等同于最新版本) . 我遇到了这个问题 .

表A Key1,Key2,Key3,data1,Data2

表B Key1,Key2,Key3,Key4,Key5,Key_SEQ,Data1,Data2

我需要在keya / keyb / kyc上加入两个表,并只选择最大序列 . 我看到的例子似乎适用于单个部分键,但在多部分键上看起来很笨拙 .

只是更新,数据库是DB2i(iSeries) .

2 回答

  • 1

    您没有提到您正在使用的SQL数据库 . 以下是标准SQL,应该在大多数数据库中都能很好地运行:

    select *
    from tablea a join
         tableb b
         on a.key1 = b.key1 and
            a.key2 = b.key2 and
            a.key3 = b.key3
    where not exists (select 1
                      from tableb b2
                      where b.key1 = b2.key1 and
                            b.key2 = b2.key2 and
                            b.key3 = b2.key3 and
                            b2.key_seq > b.key_seq
                     );
    
  • 0

    您可以使用GROUP BY子句来完成它,但我不完全确定 .

    SELECT * from A join B on A.key1=B.key1 AND A.key2=B.key2 AND A.key3=B.key3 AND B.Key_SEQ = MAX(B.Key_SEQ) GROUP BY B.key1, B.key2, B.key3;
    

    另一种方法是使用左连接语法:

    SELECT A.*, B.* from A join B on A.key1=B.key1 AND A.key2=B.key2 AND A.key3=B.key3 LEFT JOIN B as b2 on B.key1 = b2.key1 AND B.key2 = b2.key2 AND B.key3 = b2.key3 AND B.Key_SEQ < b2.Key_SEQ WHERE b2.Key_SEQ IS NULL;
    

    这个查询基本上说“给A加入B再加入B,其中第二个B大于第一个B,但第二个B不存在” . 换句话说,没有B高于第一B.

相关问题