【问题标题】:Delete all rows that don't contain the max value in group删除组中不包含最大值的所有行
【发布时间】:2013-04-05 04:21:14
【问题描述】:

我对这个热门问题有一个转折点并接受了答案: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

【问题讨论】:

    标签: sql max sql-delete


    【解决方案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
    

    【讨论】:

    • 请原谅我对SQL的无知,但是;with GetResults是SQL语句的一部分吗?如果这意味着什么,我希望能够将此 SQL 输入到 phpMyAdmin 的“运行查询”对话框中以清理大表。
    • ;with 表示您使用的是公用表表达式(您可以在线查看 SQL CTE)。 GetResults 只是我给它的一个名字,但你可以随意更改它。附带说明一下,请始终记住在运行任何更新/删除语句之前备份您的数据库。
    【解决方案2】:

    idtopten 的pk:

        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
               )
             ;
    

    【讨论】:

    • 嘿,谢谢,但我收到一个错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 'tt1 where tt1.id NOT IN (SELECT tt2.id' 附近使用正确的语法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2023-04-02
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多