计算间隔内所选列中具有相同值的记录数

时间:2016-02-22 15:45:29

标签: mysql

我试图确定在15分钟内是否有超过5封使用相同主题和电子邮件发送的电子邮件。

我目前有这样的查询:

SELECT
    frommail,
    SUBJECT,
    message,
    count(*) AS count
FROM
    compose
GROUP BY
    frommail,
    SUBJECT,
    message;

但是这会返回该表的所有相同记录的计数,但如果计数在任何15分钟的间隔内大于5,我需要有一个条件。

表格结构:

CREATE TABLE `compose` (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `email` varchar(1000) DEFAULT NULL,
  `cc` varchar(1000) DEFAULT NULL,
  `bcc` varchar(1000) DEFAULT NULL,
  `subject` varchar(1000) DEFAULT NULL,
  `message` varchar(1000) DEFAULT NULL,
  `files` blob,
  `frommail` varchar(1000) DEFAULT NULL,
  `attached` varchar(30) DEFAULT 'no',
  `vstatus` varchar(30) DEFAULT 'new',
  `rstatus` varchar(30) DEFAULT 'no',
  `mstatus` varchar(39) DEFAULT 'inbox',
  `port` int(10) NOT null,
  `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

示例数据:

id email cc bc subject message files frommail attached vstatus rstatus mstatus port date
24  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 19:58:20
25  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 19:58:20
26  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 20:23:13
27  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 20:23:13
28  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 20:23:13
29  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 20:23:13
30  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 20:23:13
31  abc         Normal mail Hello       rohan   no  new no  inbox   7070    2016-02-22 20:34:21
32  abc         Normal mail Hello       rohan   no  new no  inbox   7075    2016-02-22 20:34:21
33  abc         Normal mail Hello       rohan   no  new no  inbox   7080    2016-02-22 20:34:21
34  abc         Normal mail Hello       rohan   no  new no  inbox   8080    2016-02-22 20:34:21
35  abc         Normal mail Hello       rohan   no  new no  inbox   7070    2016-02-22 20:34:21

我确实有插入时间戳作为日期。

任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

试试这个伙伴:

Select count(e1.id), 
frommail,  
SUBJECT,
    message
from email e1
left join email e2
on e1.date>date_add(e2.date,interval 15 minute)
having count(*)>5

基本上它将表与自身进行比较,并显示其是否有超过15分钟的记录与其他记录。