【问题标题】:How to delete last record(on condition) from a table in MySql如何从 MySql 中的表中删除最后一条记录(有条件)
【发布时间】:2012-11-06 11:33:06
【问题描述】:

我有一个像这样的 LoginTime 表:

id | user_id | datetime
1  |   1     | 2011-01-17 18:51:05
2  |   1     | 2011-01-18 18:51:05  
3  |   1     | 2011-01-19 18:51:05  
4  |   2     | 2011-01-19 18:51:05  

我想删除user_id=1 的最后一条记录。 datetime可以识别用户的最后一条记录。

我怎样才能用一个查询来做到这一点。

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    您需要按 user_id 过滤表(例如 WHERE user_id=1),然后按时间排序(例如 ORDER BY datetime),然后将查询限制为仅一项(例如 LIMIT 1),然后删除这个查询。最后你会得到这样的查询:

    DELETE FROM LoginTime WHERE user_id=1 ORDER BY datetime DESC LIMIT 1
    

    【讨论】:

    • 如果有 2 条 user_id = 1 的记录具有相同的最大日期时间
    • 其中一个将被删除...根据场景可能有意义也可能没有意义。
    • 在这种情况下,我通常会使用 id 而不是时间戳来确定最新的。如果 id 设置为自动递增,则 db 中的最新条目将始终具有最高 id(例如 DELETE FROM LoginTime WHERE user_id=1 ORDER BY id DESC LIMIT 1)
    • 谢谢。这是工作。在这种情况下,一个用户很难拥有相同的日期时间。
    【解决方案2】:
    DELETE FROM logintime t1 
       JOIN 
        (
         SELECT MAX(datetime) 
          AS max_dt 
          FROM logintime 
          WHERE user_id = 1
        ) t2 
    WHERE t1.datetime  = t2.max_dt
       AND user_id = 1
    

    【讨论】:

    • 恐怕这会引发 sql 错误 1093:您不能在 FROM 子句中指定目标表 '' 进行更新
    • 感谢您的回复。它看起来很复杂但很有用。我认为是简单的。
    【解决方案3】:
    DELETE FROM table name
    RIGHT JOIN (SELECT COUNT(primary key)
                FROM table name)
    

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多