如何按顺序找到最高记录

时间:2014-02-27 23:05:38

标签: sql

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

表A. Key1,Key2,Key3,data1,Data2

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

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

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

2 个答案:

答案 0 :(得分: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
                 );

答案 1 :(得分: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.