我有一个表(“条件”),其中包含标题为“日期”的列,我想删除所有不等于当前日期的行(由 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/