删除行,同时使用SQL(MySQL)保留最旧的日期输入项]]

问题描述 投票:0回答:2

我在MySQL InnoDB数据库中有几百万个数据库行,需要对其进行清理。看这个例子。

SELECT archiveid, clearingid, pickdate 
  FROM tblclearingarchive 
  WHERE clearingid = 30978729 
  ORDER BY pickdate;


+-----------+------------+---------------------+
| archiveid | clearingid | pickdate            |
+-----------+------------+---------------------+
|  34328367 |   30978729 | NULL                | *
|  34333844 |   30978729 | 2015-10-27 15:55:30 | <- keep only this row with oldest date
|  34438038 |   30978729 | 2016-03-01 10:34:25 | *
|  34481472 |   30978729 | 2016-04-20 13:44:19 | *
+-----------+------------+---------------------+
4 rows in set (0.01 sec)

所以我知道受影响字段的clearingid

值,并且想要删除一个没有Pickdate的值(空)和两条多余的线(以后是第一次选择)。在上面的示例中,带有*的标记应被删除。

有关这种SQL更新/删除的外观的任何提示?

有大约3000万行和大约25万行(已知的clearingid)需要清除。

谢谢!

我在MySQL InnoDB数据库中有几百万个数据库行,需要对其进行清理。看这个例子。 SELECT archiveid,clearingid,pickdate从tblclearingarchive WHERE clearingid = ...

mysql sql select
2个回答
0
投票

这应该按照您的意愿进行。


0
投票

如果想要第一个,则可以过滤:


0
投票
DELETE 
FROM tblclearingarchive t1
WHERE NOT EXISTS ( SELECT NULL
                   FROM tblclearingarchive t2
                   WHERE t1.clearingid = t2.clearingid 
                     AND t1.pickdate < t2.pickdate )
© www.soinside.com 2019 - 2024. All rights reserved.