4

それで...

次のようなテーブル(データの場所と呼びましょう)があります...

Data Location ID    Data ID    Location Type    Location URL   Status    Date
1                   1          Foo              foo/3          Valid     10-21-2014
2                   1          Bar              bar/1          Valid     10-21-2014
3                   1          Foo              foo/2          Valid     03-20-2013
4                   1          Foo              foo/1          Valid     12-01-2010

...等々。このテーブルには、さまざまなデータ ID があります (簡単にするために表示していません)。アイデアは、特定のデータ ID とロケーション タイプに対して有効なエントリが 1 つだけ存在する必要があり、上記でわかるように、データ ID 1 のすべての Foo ロケーションがすべて有効 (foo/1、foo/2、foo/3) であるということです。 .

最新のエントリを除いて、すべての重複レコード (同じデータ ID と場所の種類) の [ステータス] 列を [無効] に更新するクエリを作成するのを手伝ってくれませんか。重複した基準に適合する行を特定できるクエリがありますが、group by を max (または max ではない) と組み合わせて更新する方法がわかりません。パーティションによる方法のようですが、クエリに少し慣れていないので、助けていただければ幸いです。したがって、上記のデータの場合、結果は次のようになると予想されます...

Data Location ID    Data ID    Location Type    Location URL   Status    Date
1                   1          Foo              foo/3          Valid     10-21-2014
2                   1          Bar              bar/1          Valid     10-21-2014
3                   1          Foo              foo/2          Invalid   03-20-2013
4                   1          Foo              foo/1          Invalid   12-01-2010

...前もって感謝します!

4

3 に答える 3

2

次の 1 つの UPDATE ステートメントを使用できます。

UPDATE Data_Location u
INNER JOIN (
  SELECT `Data ID`, `Location Type`, MAX(`Date`) AS max_date
  FROM Data_Location
  GROUP BY `Data ID`, `Location Type`
) t ON u.`Data ID` = t.`Data ID` 
   AND u.`Location Type` = t.`Location Type`
SET u.Status = 'Invalid'
WHERE u.`Date` <> t.max_date

SQL フィドルでのテスト

于 2014-10-21T20:22:40.877 に答える