0

私は SQL に比較的慣れていないので、テーブルの UPDATE ステートメントをまとめる必要があります。

(私は SELECT ステートメントから始めます。それが機能していることを確認したら、UPDATE ステートメントを作成します。)

したがって、1 つのテーブル CONTRACTS があり、各行は 1 つの契約を表します。顧客はテーブルに複数の契約を持つことができますが、契約番号は常に 1 ずつ増えます。

各顧客の最新の (つまり、契約数が最も多い) 契約を除くすべての契約を選択したいと考えています。(これらは私が更新する行です)

私はもう試した

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

しかし、緑色の画面は、の使用MAXが無効であることを示しています。

構文が間違っているに違いありません - 何か助けはありますか?!

4

2 に答える 2

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)
于 2013-11-11T14:59:39.877 に答える