0

テーブル構造があります:

ID1 (int), ID2 (int), AddedAt (datetime)

ここで、ID1ID2は主キーです。現在、このテーブルにはすでに最大300,000 のレコードが含まれており、1 対 1 の関係を持つようにテーブルを再構築する必要がありますつまり、 ID1を主キーから削除し、ID2 のみを主キーにする必要がありますが、ID1ごとに複数のID2を既に含むレコードがあります。

その前に、複数のID2が存在するすべてのレコードを選択して削除するクエリが必要です。ID2 のレコードを 1 つだけ残す必要があり、そのレコードは、AddedAt datetime列によって決定される最新のレコードである必要があります。

これは私がこれまでに持っているものです:

 SELECT *, COUNT(*) AS Total
 FROM TestTable
 GROUP BY ID2
 HAVING Total > 1

これはすべてのレコードを正常に返しますが、AddedByは最新のものにはなりません。ID2 を主キーにできるように、ID2 でグループ化された最新のレコードを 1 つだけ取得するには、このクエリに何を追加する必要がありますか。

これが MySQL で実行できない場合、PHP で実行できますか?

4

1 に答える 1

0

これはすべてのレコードを正常に返しますが、AddedBy は最新のものにはなりません。

ほとんどの SQLダイアレクトは、GROUPing の一部ではない列の値を選択することを禁止しています。

必要なのは、特定の列のグループごとの最大値を保持する行です。

于 2013-03-25T14:31:02.420 に答える