2011-04-29 80 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)) 
相關問題