需要mysql查询的帮助吗
我有一个随机生成的表。它有3列:P_Id、插入行的日期和文本。假设文本可以是各种动物。所以桌子看起来像需要mysql查询的帮助吗,mysql,sql,Mysql,Sql,我有一个随机生成的表。它有3列:P_Id、插入行的日期和文本。假设文本可以是各种动物。所以桌子看起来像 1 2011-06-15 03:04:05 cow 2 2011-06-15 03:04:15 dog 3 2011-06-15 03:04:19 bird 4 2011-06-15 03:04:30 cow 5 2011-06-15 03:04:30 dog 6 2011-06-15
1 2011-06-15 03:04:05 cow
2 2011-06-15 03:04:15 dog
3 2011-06-15 03:04:19 bird
4 2011-06-15 03:04:30 cow
5 2011-06-15 03:04:30 dog
6 2011-06-15 03:04:35 cow
....
在最近一次输入的最后30分钟内,选择至少发生过两次的所有动物的查询是什么?例如,奶牛在最近一次进入后的30分钟内出现了3次,即3:04:35,而狗出现了两次。Bird不会被选中,因为它只出现一次。始终有一种直接的方法,即使用子查询提取时间戳范围,然后像往常一样继续:
select animal, count(*)
from MyTable
where date >= (currentDate - 30 minutes)
group by animal
having count(*) >= 2
select name, count(name)
from your_table
where created_at >= (
select max(created_at) - INTERVAL 30 MINUTE
from your_table
)
group by name
having count(name) >= 2
始终有一种直接的方法,即使用子查询提取时间戳范围,然后像往常一样继续:
select name, count(name)
from your_table
where created_at >= (
select max(created_at) - INTERVAL 30 MINUTE
from your_table
)
group by name
having count(name) >= 2
形成一个名为latest_animals的内部表格,该表格将计算每只动物的最新入职日期。 形成另一个名为previous_animals的内部表格,该表格将计算每只动物的前一个最新入职日期 根据动物名称在这两个表之间进行左连接,并根据两个日期之间的时间差过滤记录
SELECT latest_animals.animal_name, TIME_DIFF(latest_animals.created_at, previous_animals.created_at) created_diff FROM
(
SELECT animal_name, MAX(date) created_at FROM animals GROUP BY animal_name
) latest_animals
LEFT JOIN
(
SELECT animal_name, MAX(date) created_at FROM animals GROUP BY animal_name WHERE id NOT IN
(SELECT id, MAX(date) FROM animals GROUP BY animal_name)
) previous_animals
ON latest_animals.animal_name = previous_animals.animal_name
WHERE created_diff > INTERVAL 30 MINUTE
形成一个名为latest_animals的内部表格,该表格将计算每只动物的最新入职日期。 形成另一个名为previous_animals的内部表格,该表格将计算每只动物的前一个最新入职日期 根据动物名称在这两个表之间进行左连接,并根据两个日期之间的时间差过滤记录
SELECT latest_animals.animal_name, TIME_DIFF(latest_animals.created_at, previous_animals.created_at) created_diff FROM
(
SELECT animal_name, MAX(date) created_at FROM animals GROUP BY animal_name
) latest_animals
LEFT JOIN
(
SELECT animal_name, MAX(date) created_at FROM animals GROUP BY animal_name WHERE id NOT IN
(SELECT id, MAX(date) FROM animals GROUP BY animal_name)
) previous_animals
ON latest_animals.animal_name = previous_animals.animal_name
WHERE created_diff > INTERVAL 30 MINUTE
假设您检查每个事件的最后30分钟
select name, count(name)
from your_table t1
join (
select name, max(created_at) created_at
from your_table t2
) on t1.name = t2.name
where datediff (minute,t1.created_at,t2.created_at)<=30
group by name
having count(name) >= 2
假设您检查每个事件的最后30分钟
select name, count(name)
from your_table t1
join (
select name, max(created_at) created_at
from your_table t2
) on t1.name = t2.name
where datediff (minute,t1.created_at,t2.created_at)<=30
group by name
having count(name) >= 2
在最近一次进入后的30分钟内…不是在最近30分钟内…不是在最近30分钟内min@Arun:好的,谢谢。我把年轻时争吵太多归咎于早衰。@Arun:好的,谢谢。我把年轻时争吵太多归咎于早衰。