MySQL根据列的最大值删除行

标签 mysql database sql-delete

我有一个表(“条件”),其中包含标题为“日期”的列,我想删除所有不等于当前日期的行(由 date( 的最大值确定) MAX(DATE)). 部分表结果:

| Date     | Time  | Observed                     | Temp | HeatIndex | WindChill | RelHumidity | Wind
| 14-06-21 | 19:30 | Scattered Clouds             | 85.9 | 91        | NA        | 61%         |    2 |
| 14-06-21 | 20:30 | Clear                        | 83.2 | 88        | NA        | 67%         |    3 |
| 14-06-21 | 21:30 | Clear                        | 80.7 | 85        | NA        | 74%         |    5 |
| 14-06-21 | 22:30 | Clear                        | 79.5 | 83        | NA        | 76%         |    4 |
| 14-06-21 | 23:30 | Clear                        | 78.4 | 81        | NA        | 79%         |    4 |
| 14-06-22 | 00:30 | Clear                        | 77.6 | NA        | NA        | 82%         |    3 |
| 14-06-22 | 01:30 | Clear                        | 77.1 | NA        | NA        | 83%         |    3 |
| 14-06-22 | 02:30 | Scattered Clouds             | 77.3 | NA        | NA        | 84%         |    2 |
| 14-06-22 | 03:30 | Clear                        | 77.1 | NA        | NA        | 83%         |    2 |
| 14-06-22 | 04:30 | Clear                        | 76.6 | NA        | NA        | 86%         |    4 |

所以在命令之后,我只想看到以下内容:

| 14-06-22 | 00:30 | Clear                        | 77.6 | NA        | NA        | 82%         |    3 |
| 14-06-22 | 01:30 | Clear                        | 77.1 | NA        | NA        | 83%         |    3 |
| 14-06-22 | 02:30 | Scattered Clouds             | 77.3 | NA        | NA        | 84%         |    2 |
| 14-06-22 | 03:30 | Clear                        | 77.1 | NA        | NA        | 83%         |    2 |
| 14-06-22 | 04:30 | Clear                        | 76.6 | NA        | NA        | 86%         |    4 |

我尝试过:

DELETE FROM conditions WHERE Date <> MAX(Date);

但收到:

ERROR 1111 (HY000): Invalid use of group function

最后一行始终是当前日期。我考虑过添加 ID 列并按 DESC 排序,但我希望最后一行是最新的条目。每次我将数据(python)插入数据库时​​,都会执行包含Delete的脚本。

最佳答案

标准的 SQL 是:

DELETE
    FROM conditions
    WHERE Date < (select MAX(Date) from conditions)

但是,当您在 where 子句中使用与要删除的表相同的表时,MySQL 不喜欢这样做。因此,请使用连接:

delete c
    from conditions c join
         (select max(date) as maxdate from conditions) x
         on c.date < x.maxdate;

关于MySQL根据列的最大值删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24352699/

相关文章:

mysql - 将生产数据库导入到另一台服务器会引发错误

ios - Sqlite数据库,滑动删除

php - 从多个表中搜索数据

php - SELECT * FROM table WHERE `id` in ... and where sum() less

php - sql更新不起作用不知道如何修复

database - 如何模拟 ping 命令

mysql - 插入两个表不起作用。有正确的方法吗?

mysql - 如果我重置 MYSQL 中的自动增量...它不会弄乱任何东西,对吧?

mysql - mysql delete 语法与 select 有何不同?

MySQL Delete : two similar codes, 只有一个有效