需要mysql查询的帮助吗

需要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

我有一个随机生成的表。它有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 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:好的,谢谢。我把年轻时争吵太多归咎于早衰。