【问题标题】:DB2 SQL - Inner Join get last rowDB2 SQL - 内部联接获取最后一行
【发布时间】:2018-09-06 17:31:26
【问题描述】:

我试图从表@POA 中获取最后一条记录,在表 HPOL07 中具有相同的 PO # 和 Line #。 @POA 中的记录有一个序列号。所以我试图获取最后一个序列号的记录。我不知道该怎么做?

EXEC SQL Declare RSCURSOR cursor for
SELECT HPOL07.*, @POA.*
FROM HPOL07
INNER JOIN @POA ON PORD = @POA.POAPON  AND PLINE = @POA.POALNO
WHERE PORD = :NBR AND PID <> 'PZ';

EXEC SQL  Open RSCURSOR;

EXEC SQL SET RESULT SETS Cursor RSCURSOR;   

【问题讨论】:

    标签: sql ibm-midrange db2-400 rpgle


    【解决方案1】:

    不会发誓这适用于 DB2 400,但我认为它会。

        SELECT HPOL07.*, @POA.*
        FROM HPOL07
        INNER JOIN @POA ON PORD = @POA.POAPON  AND PLINE = @POA.POALNO
        WHERE PORD = :NBR AND PID <> 'PZ'
        ORDER BY @POA.<SEQUENCE NUMBER> DESC
    FETCH FIRST 1 ROWS ONLY
    

    【讨论】:

    • 您添加的 ORDER BY 和 FETCH 是针对 HPOL07 表还是 @POA 表?
    • 获取的是整个查询的结果。对于 order by 是任何 table.column 是您的序列号。
    • 谢谢安德鲁,它成功了。我仍然对 ORDER BY 和 FETCH 感到困惑。你介意澄清一下吗? ORDER BY 可以同时使用这两个表吗? FETCH 怎么样。它如何知道使用什么表?
    • order by 和 fetch 都适用于查询的结果集。按结果集中的指定列排序,从而允许获取前 N 行来选择所需的行。
    • 安德鲁,经过进一步测试,这只带来了一个结果集。我需要从表 HPOL07 中返回多条记录,并从 @POA 表中返回一个结果。我需要做一个子查询吗?
    【解决方案2】:

    此查询可用于从 HPOL07 中获取所有记录并匹配到 @POA 中的一条记录

    SELECT HPOL07.*, @POA.*
    FROM HPOL07
    
    CROSS JOIN LATERAL (
    SELECT @POA.*
    FROM @POA
    WHERE PORD = @POA.POAPON  AND PLINE = @POA.POALNO
    ORDER BY @POA.<SEQUENCE NUMBER> DESC
    FETCH FIRST 1 ROWS ONLY
    ) @POA 
    
    WHERE PORD = :NBR AND PID <> 'PZ'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      相关资源
      最近更新 更多