我有一个包含超过1000万个条目的庞大数据库。
我想在该表中找到重复项,因此我使用以下语句:
SELECT *
FROM `customer_positions_all`
WHERE `position_id` IN (
SELECT `position_id`
FROM `customer_positions_all`
GROUP BY `position_id`
HAVING count(`position_id`) > 1
)
ORDER BY `position_id`
我还有一个“日期”列,我想只查找高于特定日期的副本(例如:date
>'2014-04-01')。
我不知道我在哪里把它放在查询中...我一直在收到错误。
答案 0 :(得分:1)
在WHERE
之前添加GROUP BY
子句,以便将其与GROUP BY
一起使用。但是,您可以在外部查询中进行过滤,从已知具有重复项的ID列表中进行过滤,如下所示:
SELECT *
FROM `customer_positions_all`
WHERE `position_id` IN (
SELECT `position_id`
FROM `customer_positions_all`
--WHERE date > '2014-04-01' --Redundant!
GROUP BY `position_id`
HAVING count(`position_id`) > 1
)
AND date > '2014-01-01'
ORDER BY `position_id`