我对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
的使用无效。
我必须弄错我的语法 - 任何帮助?!
答案 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)