iSeries Access v5.8 - 用于更新除最新记录之外的一个客户的记录的SQL?

时间:2013-11-11 12:21:08

标签: sql ibm-midrange db2-400

我对SQL比较陌生,需要为表格组合一个UPDATE语句。

(我从一个SELECT语句开始,一旦我确定它正在工作,我就会创建UPDATE语句。)

所以我有一个表CONTRACTS,每行代表一个合约。客户可以在表上拥有多个合约,但合约编号总是递增1。

我想为每位客户选择除最新(即最大合约编号)合约外的所有合约。 (这些是我要更新的行)

我试过

SELECT * From Contracts T1
WHERE EXISTS
(Select * from Contracts T2 WHERE
T1.CUST = T2.CUST AND T2.CONTRACTNUMBER < MAX(T1.CONTRACTNUMBER))

但绿屏告诉我MAX的使用无效。

我必须弄错我的语法 - 任何帮助?!

2 个答案:

答案 0 :(得分:2)

您可以将多个字段放在括号内,以便根据另一组中的行进行检查。

SELECT c.*
  FROM contracts c
  WHERE (c.cust, c.contractnbr) not in
    (SELECT m.cust, max(m.contractnbr)
       FROM contracts m
       GROUP BY cust
    )

如上所示,此概念可能对IN最有用,但也可用于JOIN的其他查询

FROM a JOIN b ON (a.x,a.y,a.z) = (b.x,b.y,b.z)

答案 1 :(得分:1)

替换

T2.CONTRACTNUMBER < MAX(T1.CONTRACTNUMBER)

T2.CONTRACTNUMBER NOT IN (SELECT MAX(T3.CONTRACTNUMBER)
                            from Contracts t3 
                            WHERE T3.CUST=T2.CUST)