0

このよくある質問と受け入れられた回答にひねりがあります: SQL の別の列で MAX(列の値)、DISTINCT で行を選択するにはどうすればよいですか?

同様に構造化されたテーブルがありますが、データタイムが最も高い行を選択する代わりに、最大日時を含まない各 ID グループ内のすべての行を削除したいと思います。クエリは、行に関してテーブルを小さくする必要があります。

受け入れられた回答の選択クエリを WHERE NOT EXISTS サブクエリで使用しようとしましたが、「From 句での更新のためにターゲット テーブルを指定できません」というエラーが表示されます。

ここで SELECT 要件を満たさない行を削除するには、これをどのように変更しますか。

SELECT tt.*
FROM topten tt
INNER JOIN
    (
     SELECT home, MAX(datetime) AS MaxDateTime
     FROM topten
     GROUP BY home
    ) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime
4

2 に答える 2

1

ID がテーブルの主キーである場合

;with
GetResults
AS
(
    SELECT tt.*
    FROM topten tt
    INNER JOIN
        (
         SELECT home, MAX(datetime) AS MaxDateTime
         FROM topten
         GROUP BY home
        ) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime
)
    DELETE GetResults
    FROM topten tt LEFT JOIN GetResults ON tt.ID = GetResults.ID
    WHERE GetResults.ID IS NULL
于 2013-04-12T16:50:24.353 に答える
0

idpk であるtopten:

    delete
      from topten tt1
     where tt1.id NOT IN (
                 SELECT tt2.id
                   FROM topten tt2
             INNER JOIN (
                          SELECT home, MAX(datetime) AS MaxDateTime
                          FROM topten tt3
                          GROUP BY home
                        ) groupedtt ON tt2.home = groupedtt.home AND tt2.datetime = groupedtt.MaxDateTime
           )
         ;
于 2013-04-12T16:21:45.267 に答える