gpt4 book ai didi

mysql - 优化sql查询删除行

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:43 25 4
gpt4 key购买 nike

我有一张看起来有点像这样的 table :-

A      B        C         D 
1 2 0 2012-10-05 18:37:00
1 3 0 2012-10-05 20:37:00
1 4 1 2012-04-07 18:37:00
2 1 1 2012-10-05 18:12:40
2 2 0 2012-10-04 18:37:00
2 3 0 2011-10-05 12:37:00

ColA 和 ColB 唯一标识一行。但是,它不是主键。 ColC 可以是 0 或 1。ColD 是一个日期时间字段。我只需要从该表中保留 colC 为 0 的 10 行(或更少)和 colC 为 1 的 10 行(或更少),最大总数为 no。行数为 20。这 10 行(每行)是最近的行,即最近的 10 行(基于 colD 值)的 colC 值为 0。同样,保留的(最多)10 行的 ColC 值为 1,应该是前 10 行的 ColC 值为 1。

目前,我正在触发 4 个查询以实现此目的。我针对 colC 值为 0 和 1 分别触发一个查询,以获取第 11 行(或更少)的时间戳。然后对于获得的每个值,我触发另一个查询以删除所有“旧”行。

我可以触发一个查询来实现这一目标吗?如果不是,什么是最佳解决方案?

PS:- 我在我的应用程序中使用事件记录,因此必须相应地修改查询。

最佳答案

这会起作用(参见 http://sqlfiddle.com/#!2/161af/1 ):

delete from t
where not exists (select 1
from ((select A, B
from t
where C = 0
order by D desc
limit 10
) union all
(select A, B
from t
where C = 1
order by D desc
limit 10
)
) a
where a.A = t.A and a.B = t.B
)

这将创建您要保留的 20 个值的列表,并删除其余值。

如果性能是一个问题,我可能建议您将 20 行放在一个单独的表中,截断原始表,然后将它们插入。

关于mysql - 优化sql查询删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12770558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com