如何在每次重复值时计算/邮寄?

时间:2016-02-29 15:07:48

标签: mysql duplicates

我试图让我自己每天晚上0:01发送一封电子邮件,当过去24小时内一定数量的重复填写时,我会用cronjob。

到目前为止我所拥有的是:

$query = "SELECT id, detection.number FROM detection INNER JOIN(SELECT number FROM detection GROUP BY number HAVING COUNT(id) >= 2)temp ON detection.number = temp.number WHERE DATE(date_submit) = CURDATE() - INTERVAL 1 DAY ORDER BY number"; 

我每天都想要一个在过去24小时内填写的重复列表,所以当一个数字填写为重复并且几天前已经填写时,我希望列表中的那个数字和我想要的场景仅在过去24小时内填写的重复项。

知道怎么创建这个吗?

可能还有一个带有重复数量计数器的额外列?

或者我可以只使用mysql查询来实现这个吗?

这里有一些示例数据,希望能够理解我想要实现的目标。

表名=检测
number - date_submit
111 ----- 2016-02-29
222 ----- 2016-02-29
333 ----- 2016-02-29
111 ----- 2016-03-01
333 ----- 2016-03-01
111 ----- 2016-04-02
111 ----- 2016-04-02
444 ----- 2016-04-02

当我在2016-04-03 00:01 am运行cronjob时,我想在整个数据库中搜索昨天填写的数字,例如111和444。 有了这些数字,我想搜索这些数字的重复,并将所有找到的副本放在一封电子邮件中,例如
111 ----- 2016-02-29
111 ----- 2016-03-01
111 ----- 2016-04-02
111 ----- 2016-04-02

亲切的问候,

阿瑞

2 个答案:

答案 0 :(得分:1)

Select * 
from detection D1
where exists 
(Select 1 
 from detection D2 
 where date_Submit >=now()-interval 1 day 
   and D1.Number = D2.Number)

答案 1 :(得分:0)

为什么你不能让他的数字计数> 1。

SELECT 
    number, COUNT(*) 
FROM 
    detection 
WHERE 
    DATE(date_submit) = CURDATE() - INTERVAL 1 DAY 
ORDER BY 
    number
HAVING COUNT(*) > 1;