gpt4 book ai didi

mysql - MySQL查询查找重复时间戳

转载 作者:行者123 更新时间:2023-11-29 12:19:07 25 4
gpt4 key购买 nike

我编写了以下查询来查找日期范围内的重复时间戳,然后删除具有较大 ID 的重复时间戳。然而,这个选择永远不会完成。

SELECT 
*
FROM
data
WHERE
id NOT IN (SELECT
MIN(id)
FROM
data
WHERE
datapoint_name LIKE 'Temp%'
AND timestamp BETWEEN '2012-07-31' AND '2012-08-03'
group by timestamp , datapoint_name)
AND datapoint_name LIKE 'Temp%'
AND timestamp BETWEEN '2012-07-31' AND '2012-08-03';

我觉得很奇怪,因为各个组件运行得非常快,而且行数并不多。具体来说:

  • SELECT MIN(ID) ... GROUP BY 子查询在 0.7 秒内返回 476 行。
  • 不带 id NOT IN() 的外部 SELECT * 在 0.001 秒内返回 490 行。

换句话说,有 14 个重复项,但 NOT IN() 操作似乎花费了过多的时间。事实上,我从来没有耐心看看它是否会完成。我可以做什么来加快速度?我是否做了一些根本性错误的事情?

最佳答案

原因可能是正在为正在比较的每一行重新运行子查询。尝试将子查询移至 from 并使用 left join:

SELECT d.*
FROM data d LEFT JOIN
(SELECT timestamp, datpoint_name, MIN(id) as minid
FROM data
WHERE datapoint_name LIKE 'Temp%' AND
timestamp BETWEEN '2012-07-31' AND '2012-08-03'
GROUP BY timestamp , datapoint_name
) dd
ON d.datapoint_name = dd.datapoint_name and
d.timestamp = dd.timestamp and
d.id = dd.minid
WHERE d.datapoint_name LIKE 'Temp%' AND
d.timestamp BETWEEN '2012-07-31' AND '2012-08-03' AND
dd.minid IS NULL;

关于mysql - MySQL查询查找重复时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29302626/

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