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

with id being the pk of 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 回答