MySQL根据列的最大值删除行
我有一个表(“条件”),其中包含一个标题为“日期”的列。我想删除所有不等于当前日期的行(由MySQL根据列的最大值删除行,mysql,database,sql-delete,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 | N
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);
最后一行始终是当前日期。我考虑过添加ID列并按
DESC
排序,但我希望最后一行是最新的条目。每次插入数据(python)在数据库中,将执行包含Delete
的脚本。非常确定您不能使用MAX,原因与您不能在Delete上子查询当前表相同
您可以使用CURDATE()
DELETE FROM conditions WHERE Date CURDATE();
这方面的标准SQL是:
DELETE
FROM conditions
WHERE Date < (select MAX(Date) from conditions)
除非
MAX(date)==CURDATE()
,否则这将不起作用,这并不总是正确的(例如,如果最后一行是昨天创建的)@julienc最后一行将在运行删除之前创建。我假设OP知道这意味着他每天开始时都会有一行。如果这成为问题,发布的链接应该会让他转到一个查询,该查询将清除过去的24小时。是的。在新的一天第一次运行后有一行是可以接受的。这只是为了让DB远离gr欠的太多了。我想从技术上讲,我的应用程序只需要这一行,但是整天回头看是很好的:)再次感谢!
DELETE
FROM conditions
WHERE Date < (select MAX(Date) from conditions)
delete c
from conditions c join
(select max(date) as maxdate from conditions) x
on c.date < x.maxdate;