2010-08-18 94 views
0

我有一個名爲user_logins的表,它跟蹤用戶登錄到系統中。它有三列,LOGIN_ID,USER_ID和login_time基於TIMESTAMP的MySQL分組月份

login_id(INT) | user_id(INT) | login_time(TIMESTAMP) 
------------------------------------------------------ 
    1  |  4  | 2010-6-14 08:54:36 
    1  |  9  | 2010-7-16 08:56:36 
    1  |  9  | 2010-8-16 08:59:19 
    1  |  9  | 2010-8-16 09:00:24 
    1  |  1  | 2010-8-16 09:01:24 

我期待編寫一個查詢,將決定獨特的登錄次數每天和計數,最多每月。如果用戶在一天內登錄兩次,則只會計算一次。這個例子的輸出是作爲結果表八月只有2個是因爲USER_ID 9在一天登錄兩次,他登錄到系統只計爲1所登錄的那一天如下

month(VARCHAR) | logins(INT) 
--------------------------- 
June  |  1 
July  |  1 
August  |  2 

在堆棧溢出的幫助下,我寫了一個查詢,實現了這個功能,但由於某種原因,當我使用DATE_FORMAT函數時,僅僅使用'%M'嘗試讀取java中使用hibernate的值時,該對象被損壞並且不被識別爲字符串。我想這可能是因爲我的查詢做錯了。我的查詢如下:

SELECT login_date, SUM(logins) as numLogins FROM (
    SELECT 
     DATE_FORMAT(DATE(login_time), '%M') AS login_date, 
     COUNT(DISTINCT login_id) AS logins 
    FROM user_logins 
    WHERE login_time > DATE_SUB(NOW() - INTERVAL 1 YEAR) 
    GROUP BY DATE(login_time)) 
AS Z GROUP BY(login_date)"; 
+0

不確定它是否是這裏的拼寫錯誤,或者您是否複製了代碼,但是您在第一行末尾具有「FRMO」而不是「FROM」的SQL。 – gabe3886 2010-08-18 16:25:47

+0

只是編輯我的部分錯別字。 – IamBanksy 2010-08-18 16:27:08

回答

1

爲什麼不使用提取(從login_time月)獲取月份作爲數值?

 
SELECT extract(month from login_time), 
     COUNT(DISTINCT login_id) AS logins 
FROM user_logins 
WHERE login_time > DATE_SUB(NOW() - INTERVAL 1 YEAR) 
GROUP BY extract(month from login_time) 
+0

,這給我一個語法錯誤,我沒有意識到提取方法。 – IamBanksy 2010-08-18 16:37:23

+0

適用於MySQL 5.0 – 2010-08-18 16:42:19