2012-03-12 84 views
0

我正在运行一个查询,以获取当前()的今天活动,并将它与过去5天中的活动进行比较。MySql date_add()查询改进

select count(*) ,date(timestamp) date , now() now 
from activitylog 
where timestamp>date_add(now(), INTERVAL -5 DAY) and 
     hour(timestamp) <=hour(now()) 
group by date(timestamp) 
order by date(timestamp) desc; 

有没有比上述方式更有效的方法吗?

+2

你可以发表表格的结构吗? – 2012-03-12 15:11:26

回答

1

正如所写的,查询将返回当天的活动,直到当前日期和前4天的当前小时,再加上当前小时的活动仅在五天前 - 使其包括当前的整个一天第五日,小时,where子句更改为:

where timestamp>date(date_add(now(), INTERVAL -5 DAY)) and 
     hour(timestamp) <=hour(now()) 
从这个

除此之外,我能想到的唯一的问题是,以检查是否有在时间戳列的索引。否则,它似乎处于最佳状态。

+0

我真的希望有一种方式只使用1,即在哪里时间戳(date_add(SOME_MAGIC_HERE)),并取消和小时(时间戳... – artfullyContrived 2012-03-12 16:09:05

+0

@artfullyContrived:如果你想排除当前小时后的数据在过去的5天内 – 2012-03-12 16:15:35

+0

谢谢。让我们继续打开一天,以防其他一些mysql大师提出一些神奇的东西。 – artfullyContrived 2012-03-13 09:39:11