Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择两个时间戳之间的所有记录,然后按值的出现次数分组_Mysql_Sql - Fatal编程技术网

Mysql 选择两个时间戳之间的所有记录,然后按值的出现次数分组

Mysql 选择两个时间戳之间的所有记录,然后按值的出现次数分组,mysql,sql,Mysql,Sql,我有一个名为Events的MYSQL数据库表。在这个表中,我有以下几列 index | timestamp | email 我想选择每个电子邮件地址在两个时间戳之间出现的次数 到目前为止,我可以做到: "SELECT `email`, count(*) FROM `incidents` GROUP BY `email` ORDER BY count(*) DESC; 上面的查询工作正常,并提供了一个按出现次数排序的所有唯一电子邮件地址的列表。但是,它没有考虑时间戳 理想情况下,我希望在一个

我有一个名为Events的MYSQL数据库表。在这个表中,我有以下几列

index | timestamp | email
我想选择每个电子邮件地址在两个时间戳之间出现的次数

到目前为止,我可以做到:

 "SELECT `email`, count(*) FROM `incidents` GROUP BY `email` ORDER BY count(*) DESC;
上面的查询工作正常,并提供了一个按出现次数排序的所有唯一电子邮件地址的列表。但是,它没有考虑时间戳

理想情况下,我希望在一个查询中执行以下操作:

SELECT `email`, `timestamp` FROM `incidents` WHERE `timestamp` BETWEEN '2015-12-01 00:00:00' AND '2015-12-30 23:59:59';

COUNT(*) GROUP BY `email` ORDER BY count(*) DESC;

这将选择两个时间戳之间的所有记录,然后计算每个电子邮件地址出现的次数,并按此计数排序。如何在一个查询中实现这一点?

简单地在第一个查询中添加
WHERE
子句会有什么问题吗

SELECT `email`, COUNT(*)
FROM `incidents`
WHERE `timestamp` BETWEEN '2015-12-01 00:00:00' AND '2015-12-30 23:59:59'
GROUP BY `email`
ORDER BY COUNT(*) DESC

简单地在第一个查询中添加
WHERE
子句会有什么问题吗

SELECT `email`, COUNT(*)
FROM `incidents`
WHERE `timestamp` BETWEEN '2015-12-01 00:00:00' AND '2015-12-30 23:59:59'
GROUP BY `email`
ORDER BY COUNT(*) DESC

有几种方法可以做到这一点。下面是一个带有子查询的:

SELECT A.email,
COUNT(*)
FROM (SELECT *
  FROM incidents
  WHERE timestamp BETWEEN '2015-12-01 00:00:00' AND '2015-12-30 23:59:59'
  ) A
GROUP BY A.email
ORDER BY COUNT(*)

这可能不是最有效的方法,但取决于表的大小。

有几种方法可以做到这一点。下面是一个带有子查询的:

SELECT A.email,
COUNT(*)
FROM (SELECT *
  FROM incidents
  WHERE timestamp BETWEEN '2015-12-01 00:00:00' AND '2015-12-30 23:59:59'
  ) A
GROUP BY A.email
ORDER BY COUNT(*)

根据表格的大小,这可能不是最有效的方法。

选择count(*)作为cnt、email、来自
事件的时间戳
,其中时间戳介于“2015-12-24 12:00:00”和“2015-12-24 12:30:00”之间,按cnt的电子邮件顺序分组,假设相同的时间戳适用于所有电子邮件,您只需将WHERE条件添加到原始查询中即可做到这一点,如:
SELECT email,count(*)FROM incents WHERE timestamp介于“2015-12-01 00:00:00”和“2015-12-30 23:59:59”之间的事件按电子邮件顺序分组按计数(*)DESC选择计数(*)作为cnt、电子邮件、事件中的时间戳,其中时间戳介于“2015-12-24 12:00:00”和“2015-12-24 12:30:00”之间,按电子邮件顺序分组,按cnt描述假设相同的时间戳适用于所有电子邮件,您只需将where条件添加到原始查询中即可完成此操作,如:
选择电子邮件,计数(*)从时间戳介于“2015-12-01 00:00:00”和“2015-12-30 23:59:59”之间的事件中,通过电子邮件按计数分组(*)DESC;
@PhiterFernandes感谢您设置小提琴。感谢您的帮助:)我想我有所有的关键成分,但就是不能把它们放在一起。@PhiterFernandes谢谢你摆好小提琴。谢谢你的帮助:)我想我有所有的关键成分,但就是不能把它们放在一起。