删除不包含组中最大值的所有行

时间:2013-04-12 15:03:09

标签: sql max sql-delete

我对这个热门问题有一个转折,并接受了答案:How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?

我有一个结构相似的表,但我没有选择具有最高数据时间的行,而是要删除每个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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

id是pk 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
           )
         ;