【问题标题】:How do I find highest record in sequence如何按顺序找到最高记录
【发布时间】:2014-03-31 17:09:30
【问题描述】:

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

表 A 键1,键2,键3,数据1,数据2

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

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

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

【问题讨论】:

  • 是 key1, key2.. 列吗?
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: sql


【解决方案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
                 );

【讨论】:

    【解决方案2】:

    您也许可以使用 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 join B join B,其中第二个 B 大于第一个 B,但第二个 B 不存在。”换句话说,没有比第一个 B 更高的 B。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 2018-09-07
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 2016-08-07
      相关资源
      最近更新 更多