2011-04-29 49 views
1

我想在以下查询中按date1和date2之间的每分钟进行分组。还应该显示0值。所以应该显示日期之间的每一分钟。问题是这些日期在表中不存在。如何在一个时间范围内按分钟分组,并在MySQL中显示0个值?

SELECT 
click.date as 'date', 
COUNT(*) 
FROM click 
INNER JOIN short_url surl ON click.short_url_id = surl.id 
INNER JOIN article_surl ON article_surl.article_id = 3 
WHERE click.date BETWEEN (?Date1:'2011-04-24 13:33:00') AND (?Date2:'2011-04-24 15:33:00') 
GROUP BY DATE_FORMAT(click.date, '%Y-%m-%d %H:%i:00'); 

我认为唯一的方法是做一个临时表?这是什么性能命中?加入日期也不太好,因为click.date在日期时间中也可能有毫秒。所以应该使用DateFormat? 也许这对我的应用程序逻辑更好,阅读数组并使用0值填写缺失的日期。

回答

2

我认为你的建议是在应用程序逻辑中填充缺失的值是避免创建临时表的最好方法,尤其是如果你要处理数组。我们在我们编写的一些服务中也做了同样的事情。

1

要按分钟组,你可以使用这个条款 -

... 
GROUP BY DAYOFYEAR(click.date), (60 * HOUR(click.date) + MINUTE(click.date)) 
相关问题